gpt4 book ai didi

c# - foreach 的奇怪 lock() 行为

转载 作者:太空狗 更新时间:2023-10-30 00:01:11 26 4
gpt4 key购买 nike

所以,这不是我的代码,并且已被缩短以显示行为,但它给出了非常意想不到的结果。

我在一个类中有两个函数和一个锁

object mylock = new object();
List<string> temp = new List<string>();

Func1(string)
{
lock(mylock)
{
temp.Add(string);
}
}

Func2()
{
lock(mylock)
{
temp.ForEach(p => Func1(p));
}
}

现在,我知道这没有意义,但是当调用 Func2 时,Func1 不应该死锁吗?在我们的例子中,它执行。谢谢。

最佳答案

不,它不应该死锁。

Func1 如果被已经持有锁的人调用(如 Func2),则可以获得锁

MSDN doc for lock解释:

“当持有互斥锁时,在同一个执行线程中执行的代码也可以获取和释放锁。但是,在释放锁之前,在其他线程中执行的代码将无法获取锁。”

锁的目的是防止不同的线程访问同一个资源。 Func1Func2同一个线程

关于c# - foreach 的奇怪 lock() 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/567546/

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