Wartekette traversal
Wait Chain Traversal (WCT) ermöglicht Debuggern die Diagnose von Anwendungshängern und Deadlocks.
Eine Wartekette ist eine abwechselnde Sequenz von Threads und Synchronisierungsobjekten, bei der jeder Thread auf das folgende Objekt wartet. Jedes folgende Objekt ist wiederum im Besitz des nachfolgenden Threads in der Kette.
Ein Thread wartet auf ein Synchronisierungsobjekt von dem Zeitpunkt, zu dem der Thread das Objekt anfordert, bis es abgerufen wurde. Diese Sperre gehört einem Thread ab dem Zeitpunkt, zu dem der Thread sie abruft, bis sie vom Thread freigegeben wird. Anders ausgedrückt: Wenn Thread 1 auf eine Sperre wartet, die thread 2 gehört, wartet Thread 1 auf Thread 2.
WCT unterstützt die folgenden Synchronisierungsgrundsätze:
- Aufruf für erweiterte lokale Prozeduren (ALPC)
- Microsoft Component Object Model (COM)
- Objekte des kritischen Abschnitts
- Mutex-Objekte
- SendMessage-Funktion
- Wartevorgänge für Prozesse und Threads
Um die Wartekette für einen oder mehrere Threads abzurufen, erstellen Sie mithilfe der Funktionen OpenThreadWaitChainSession und GetThreadWaitChain eine WCT-Sitzung . WCT-Sitzungen werden durch ein Handle vom Typ HWCT dargestellt.
Sitzungen können synchron oder asynchron sein.
Sie können synchrone Sitzungen nicht abbrechen und den aufrufenden Thread blockieren, bis eine Wartekette abgerufen wurde.
Asynchrone Sitzungen blockieren den aufrufenden Thread nicht und können von der Anwendung mithilfe der CloseThreadWaitChainSession-Funktion abgebrochen werden. Ergebnisse aus asynchronen Vorgängen werden über eine Von der Anwendung bereitgestellte WaitChainCallback-Rückruffunktion zur Verfügung gestellt.
Bei asynchronen Sitzungen kann der Aufrufer über GetThreadWaitChain einen Zeiger auf eine Kontextdatenstruktur angeben. Derselbe Zeiger wird an die Rückruffunktion WaitChainCallback übergeben.
Die Kontextdatenstruktur ist benutzerdefinierte und für WCT undurchsichtig. Die Kontextdatenstruktur kann von der Anwendung verwendet werden, um den Kontext zwischen einer WCT-Abfrage und einer Rückruffunktion zu kommunizieren. In der Regel übergeben Sie ein Ereignishandle über diese Struktur. Wenn der Rückruf ausgeführt wird, wird dieses Ereignis signalisiert, und ein Überwachungsthread wird darüber informiert, dass die Abfrage abgeschlossen wurde.
Ein Beispiel für den Wartekettendurchlauf finden Sie unter Verwenden von WCT.
Siehe auch
- Verwenden von WCT
- WCT-Referenz
- Bugslayer: Wait Chain Traversal vom MSDN Magazine
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für