Deadlock Beispiel-in .net?
Kann jemand geben eine einfache Deadlock-Beispiel-code in c# ? Und bitte sagen Sie den einfachsten Weg zu finden deadlock in Ihrem C# - Codebeispiel. (Kann sein, das Instrument, das erkennen, die dead-lock-im gegebenen Beispiel-code.)
HINWEIS: ich habe VS 2008
- es gibt keine solche Sache wie C#.NET.
- Vielen Dank für die Korrektur von mir 😀
Du musst angemeldet sein, um einen Kommentar abzugeben.
einem gemeinsamen Weg ist, wenn Sie geschachtelte locks, die nicht erworben, in der gleichen Reihenfolge. Thread 1 erwerben könnten, sperren und thread 2 könnte die Sperre B, und Sie würde deadlock.
edit: nicht-verriegeln Beispiel .. mit waithandles. Angenommen, Sokrates und Descartes sind mit steaks und Sie beide, gut erzogenen Philosophen, erfordern sowohl eine Gabel und ein Messer, um zu Essen. Allerdings haben Sie nur einen Satz von Silberwaren, so ist es möglich, für jeden zu packen Utensilien und dann ewig warten, bis die andere hand über Ihre Utensilien.
Sehen die Ess-Philosophen-Problem
Dies ist ein typischer code zum erstellen einer Blockade im C# - code.
Kasse diesem MSDN-Artikel: http://msdn.microsoft.com/en-us/magazine/cc188793.aspx
Für die deadlock-Beispiel-code, versuchen Sie es mit
lock(this)
in Ihrer Klasse simulieren die deadlock-Szenario. Kasse dieses Beispiel.Folgenden zwei würdige das Lesen von Artikeln erkennt Deadlocks zur Laufzeit und beschreibt Wege, Sie zu vermeiden.
Gibt es eine weitere Möglichkeit zum erreichen deadlock in C#. Da .NET 2.0 SP1 Anzahl der threads im pool sind auf 250 begrenzt (von 25 in der vorherigen version) pro Kern.
So, techically, können Sie beginnen, zu viele Aufgaben in den pool, auf die Fertigstellung zu warten, für einen anderen asynchronen Vorgang (der ausgeführt wird durch den thread pool). Deshalb, Aufgabe im pool wird nicht freigegeben und async task nicht gestartet werden, da es keine verfügbaren threads.
Finden Sie Beispiel und genauere Erklärung hier:
Programmierung der Thread-Pool. Deadlocks
Antwort auf die Teil Ihrer Frage bezüglich der deadlock-Erkennung, ich bezweifle eher, dass dies im Allgemeinen möglich. Es ist ähnlich wie in der Frage mit dem Halteproblem, Sie können nicht effektiv berechnen Sie die Semantik. Eine Möglichkeit, dies zu überwinden, ist die Verwendung eines watchdog das würde in regelmäßigen Abständen Umfrage jeder thread, wenn er noch am Leben und geben ihm einen gewissen Zeitlimit zu beantworten, wenn 2 threads nicht reagieren, können Sie davon ausgehen, Sie sind entweder zu beschäftigt, oder Sie sind tot-gesperrt.