gpt4 book ai didi

c# - 方法参数线程安全吗?

转载 作者:太空宇宙 更新时间:2023-11-03 21:51:42 25 4
gpt4 key购买 nike

public void Remove(T item)
{
locker.EnterWriteLock();
try
{
list.Remove(item);
}
}

上面是一个实例类的方法。假设实例是 myObject。关于上面的片段,我的问题是:

线程一调用 myObject.Remove(A)
线程一执行 locker.EnterWriteLock()

线程两次调用 myObject.Remove(B)

线程一进入try block ,执行list.Remove()

此时 item 的值是多少?即 list.Remove() 是否将以 A 或 B 作为参数调用?

最佳答案

每个线程都有自己的调用堆栈,方法参数存储在该堆栈中。堆栈不在线程之间共享。

在线程 one 的堆栈中,有一行指示正在调用 Remove 并且包含“A”或对“A”的引用(取决于它是值还是引用类型)。

当线程 2 进入方法时,它有自己的调用堆栈(线程 1 的堆栈在线程 2 运行时未使用),其中有一行指示 Remove 的开始,项目为“B”。然后该线程被挂起,它的调用堆栈未被使用,我们回到线程 1,其中项目“A”是调用堆栈上的内容。

在未来的某个时候,线程 2 将被重新激活,并将在其调用堆栈中包含项目“B”。

关于c# - 方法参数线程安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14225396/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com