Wie um Deadlocks zu vermeiden .NET
Ist, gibt es keine gemeinsamen Verfahren oder Regeln zur Vermeidung deadlock in einem Programm? Auch gibt es Unterstützung von der CLR oder in einem instrument von Sprache/Rahmenwerk zum Umgang mit einem solchen Szenario?
Bedeutet "lock-Dinge, die in einer konsistenten Reihenfolge" zählen?
Sehr schwer zu bändigen und von der Beantwortung mit "nur vermeiden einfädeln".
Sorry für die schlechte Formulierung, ich möchte nur wissen, konnte ich Folgen einige Regeln zur Vermeidung solcher Probleme (z.B. Nicht auf lock).
Sehr schwer zu bändigen und von der Beantwortung mit "nur vermeiden einfädeln".
Sorry für die schlechte Formulierung, ich möchte nur wissen, konnte ich Folgen einige Regeln zur Vermeidung solcher Probleme (z.B. Nicht auf lock).
InformationsquelleAutor user854301 | 2012-08-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
MSDN tatsächlich gibt es einige gute Artikel zu diesem Thema, von denen sein:
Vermeidung und Erkennung von Deadlocks .NET-Anwendungen mit C# und C++
InformationsquelleAutor Justin Niessner
Beachten Sie, dass nur wenig von diesem ist .net-spezifisch:
Die größte Möglichkeit der Vermeidung eines Deadlocks Sperre in eine konsistente Reihenfolge; das heißt, Sie erhalten regelmäßige blockieren eher als eine Sackgasse, sondern erfordert viel nachdenken und planen, was Sie sperren und wenn. Natürlich, dieser Gedanke und die Planung ist sowieso notwendig.
Einen einfachen Weg, dies zu erreichen ist: versuchen Sie, brauchen nur ein lock-Objekt zur Zeit; also, anstelle von sperren die Ein und B-Schloss (separat erhältlich) Ein dann B. auch Dies erfordert denken und planen, sondern ist in der Regel erreichbar.
Nehmen es mehr im Allgemeinen, die Vermeidung von über-granulare sperren können eine große Vernunft-Sparer hier. Für die lock-Objekte, die konkurrieren könnte, stellen eine ernsthafte Betrachtung in nur mit einer einzigen Sperre für beide Konzepte. In vielen Fällen ist dies nicht äußerst Auswirkungen die Zeit konkurrieren, aber macht den code viel einfacher und zuverlässiger.
Tatsächlich ein Haar in der Suppe habe ich mit der Sprache ist, dass "nehmen eine Sperre, aber mit einem timeout" ist so viel mehr code-intensive, als "mit Schloss". Die Gewährleistung haben Sie immer timeouts können auch sicherstellen, dass ein insgesamt lockup wird wiederhergestellt. Dies sollte aber in Erster Linie nur verwendet werden, um Bereiche zu identifizieren, sind Verriegelung in der falschen Reihenfolge, so dass Sie Sie beheben kann.
InformationsquelleAutor Marc Gravell
Ich denke, das beste, dass Sie gehen, um Ihr problem zu verwenden, die den normalen Prozess der Kontrolle. Guard Zugriff auf Ihre Ressourcen mit Mutexen oder Semaphoren.
Dies könnte helfen, Sie
http://msdn.microsoft.com/en-us/library/hw29w7t1(v=vs. 71).aspx
Ja, Sie haben Recht, eigentlich Mutexe und Semaphoren sind die Ursache des deadlocks. Ich denke, der einzige Weg, es zu vermeiden, ist die Planung sehr gut die Art und Weise, Ihren code Zugriff auf Ihre Ressourcen.
InformationsquelleAutor j0N45