Я написал тест на то, что, по моему мнению, должен быть действительным случаем для тупика. Похоже, что после того, как lock
был получен экземпляром класса a, этому экземпляру больше не нужно повторно приобретать lock
, даже если я явно попытаюсь вызвать другой метод, который должен lock
снова.
Вот класс:
internal class Tester
{
private readonly object _sync = new object();
public Tester() { }
public void TestLock()
{
lock (_sync)
{
for (int i = 0; i < 10; i++)
{
Deadlock(i);
}
}
}
private void Deadlock(int i)
{
lock (_sync)
{
Trace.WriteLine(i + " no deadlock!");
}
}
}
Вывод:
0 нет тупика!
1 нет тупика!
2 без тупика!
3 нет тупика!
4 нет тупика!
5 нет тупика!
6 нет тупика!
7 нет тупика!
8 нет тупика!
9 нет тупика!
Я бы подумал, что это вызовет тупик... может ли кто-нибудь пролить свет на это?