我期待下面的代码时,清除试图锁定该建设已经锁定了同一个对象上死锁:为什么这段代码不会死锁?
void Main()
{
(new SiteMap()).Build();
}
class SiteMap
{
private readonly object _lock = new object();
public void Build()
{
lock (_lock)
{
Clear();
Console.WriteLine("Build");
}
}
public void Clear()
{
lock (_lock)
{
Console.WriteLine("Clear");
}
}
}
输出:
清除
构建
编辑1
谢谢大家的回答。
如果我添加一个呼叫清除的锁内建设(保持同一代码的其余部分):
public void Clear()
{
lock (_lock)
{
Build();
Console.WriteLine("Clear");
}
}
死锁不会发生(或至少这是我的想法,LINQ垫崩溃)。
根据你的回答,这不应该发生,因为它仍然是相同的线程。
谢谢!
请参阅http://www.albahari.com/threading/part2.aspx,在“嵌套锁定”下。 –