Я нашел этот пример в книге. И написано, что этот код приводит к тупиковой ситуации. Но я не понимаю и не понимаю, почему это должно быть? Я всегда получаюЗаключительный тупик не возникает
«Locked B и A»
«Locked А и В»
static void Main()
{
object lockA = new object();
object lockB = new object();
var up = Task.Run(() =>
{
lock (lockA)
{
Thread.Sleep(1000);
lock (lockB)
{
Console.WriteLine(“Locked A and B”);
}
}
});
lock (lockB)
{
lock (lockA)
{
Console.WriteLine(“Locked B and A”);
}
}
up.Wait();
Console.ReadLine();
}
Попробуйте добавить спать в основной поток, а также после того, как вы приобрели 'lockB'. –
Результаты 10/10 являются взаимоблокировками. Почему это так? Должно быть, это должно быть какое-то разнообразие. – Stalli