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のクラッシュだと思います)。
あなたの答えによると、それはまだ同じスレッドなので、これは起こらないはずです。
ありがとう!