Ich habe mehrere Artikel und Beiträge gelesen, die sagen, lock(this)
, lock(typeof(MyType))
, lock("a string")
sind alle schlechte Praxis, weil ein anderer Thread auf den gleichen Schlüssel sperren und einen Deadlock verursachen könnte. Um dieses Problem zu verstehen, habe ich versucht, einen Beispielcode zu erstellen, um den Deadlock zu veranschaulichen, aber ich war nicht in der Lage, meinen Kopf darum zu wickeln.Beispielcode zur Veranschaulichung eines Deadlocks mithilfe von lock (this)
Kann jemand einen kurzen Code schreiben, der dieses klassische Problem veranschaulicht? Bitte halten Sie es kurz, ich kann Code nur in kleineren Stücken verarbeiten.
Bearbeiten: Ich denke, Lassevk fasst es gut zusammen; dass das eigentliche Problem darin besteht, dass Sie die Kontrolle über Ihre Schlösser verloren haben. Sobald dies der Fall ist, können Sie die Reihenfolge, in der die Sperren aufgerufen werden, nicht mehr kontrollieren und eine mögliche Deadlock-Situation zulassen.
lock(this)
, lock(typeof(MyType))
, usw. sind alle Situationen, in denen Sie eine Sperre gewählt haben, die unmöglich zu kontrollieren ist.
Aha, ich schrieb das gleiche Beispiel, während Sie es gepostet :) aber ich habe lange und int gewählt – Maghis
Sehr gutes Beispiel: Ein Schlüsselelement beim Erstellen eines Deadlocks ist Sperren auf zwei Ressourcen in ** VERSCHIEDENEN ** Bestellungen. –
Ja, das ist der Grundsatz, nach dem Techniken wie "leveled lock" gebaut werden und warum sie sehr gut sind, um Deadlocks zu vermeiden. – Maghis