Я ожидаю, что следующий код заблокируется, когда 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");
}
}
}
Вывод:
Clear
Build
Edit 1
Всем спасибо за ответы.
Если я добавлю вызов Build внутри блокировки Clear (оставив остальную часть кода без изменений):
public void Clear()
{
lock (_lock)
{
Build();
Console.WriteLine("Clear");
}
}
Взаимная блокировка действительно возникает (или, по крайней мере, я так думаю, происходит сбой LINQ Pad).
Судя по вашим ответам, этого быть не должно, потому что это все та же ветка.
Спасибо!