Free Trial

Safari Books Online is a digital library providing on-demand subscription access to thousands of learning resources.

Share this Page URL
Help

Nebenläufige Programmierung > 395 Das Producer-Consumer-Muster implementieren - Pg. 1191

>> Nebenläufige Programmierung 1191 Wenn Sie einen Abbruch-Callback einsetzen (siehe Rezept 389), entsorgen Sie das Cancel- lationTokenRegistration-Objekt nicht in der Callback-Methode selbst. Das Warten auf den Callback würde ansonsten einen Deadlock verursachen. Testen Sie ein nebenläufiges Programm, das dem Risiko eines Deadlocks ausgesetzt ist, auf verschiedenen Maschinen mit unterschiedlich viel Prozessoreinheiten. Instrumentalisieren Sie zum Test alle Deadlock-gefährdeten Tasks, indem Sie mit Thread.SpinWait mit einer zufällig ermittelten Anzahl Iterationen an verschiedenen Stellen im Task aufrufen. Experi- mentieren Sie ebenfalls mit der Einschränkung der Parallelität auf verschiedene Anzahlen von Prozessoreinheiten. Setzen Sie das CHESS -Tool von Microsoft ein ( http://research.microsoft.com/projects/ CHESS ), über das Sie nebenläufigen Code unter anderem auf Deadlocks, Livelocks und Race Conditions in allen möglichen Verschachtelungen testen können. Deadlocks lokalisieren Sollten trotz aller Vorsichtsmaßnahmen Deadlocks auftreten, helfen die folgenden Tipps viel- leicht bei der Lokalisierung: Wenn Sie das Glück haben, den Deadlock beim Debuggen in Visual Studio 2010 zu erhal- ten, halten Sie das Programm in Visual Studio an. Visual Studio 2010 zeigt in der Regel eine der Programmanweisungen an, die gerade hängen. Über das Parallele-Aufgaben- Fenster (D EBUGGEN / F ENSTER / P ARALLELE A UFGABEN ) erhalten Sie eine Information darüber, welche Tasks in einem Deadlock hängen. Über einen Doppelklick können Sie zu den ent-