所以,这不是我的代码,并且已缩短以显示行为,但它给出了非常意外的结果.
我在一个类和一个锁中有两个函数
object mylock = new object(); Listtemp = new List (); Func1(string) { lock(mylock) { temp.Add(string); } } Func2() { lock(mylock) { temp.ForEach(p => Func1(p)); } }
现在,我知道这没有意义,但是当调用Func2时,不应该Func1死锁吗?在我们的例子中,它执行.谢谢.
不,它不应该死锁.
Func1
如果有人已经持有锁(如Func2
)
锁定的MSDN文档解释说:
"在保持互斥锁定的同时,在同一个执行线程中执行的代码也可以获取并释放锁定.但是,在锁定被释放之前,阻止其他线程中执行的代码获取锁定."
锁定的目的是防止不同的线程访问相同的资源. Func1
并Func2
在同一个线程上.