我期望以下代码发生死锁,当Clear 尝试对已被Build 锁定的同一对象进行锁定时:
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
谢谢大家的回答。
如果我在 Clear 的锁内添加对 Build 的调用(保持其余代码不变):
public void Clear()
{
lock (_lock)
{
Build();
Console.WriteLine("Clear");
}
}
死锁发生了(至少我认为是这样,因为LINQ Pad崩溃了)。
根据您的回答,这不应该发生,因为它仍然是同一个线程。
谢谢!