Ich fand dieses Beispiel in dem Buch. Und es steht geschrieben, dass dieser Code zu einem Deadlock führt. Aber ich verstehe es nicht und verstehe nicht warum es sein sollte? Ich bekomme immerTask Deadlock tritt nicht auf
„Locked B und A“
„Locked A und B“
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();
}
Versuchen Sie, einen Schlaf im Hauptthread hinzuzufügen, nachdem Sie 'lockB' erworben haben. –
10/10 Ergebnisse sind Deadlocks. Wieso ist es so? Ich dachte, es sollte eine gewisse Vielfalt sein. – Stalli