Wait Chain Traversal
Le parcours de chaîne d’attente (WCT) permet aux débogueurs de diagnostiquer les blocages et les blocages d’application.
Une chaîne d’attente est une séquence alternative de threads et d’objets de synchronisation dans laquelle chaque thread attend l’objet qui suit. Chaque objet qui suit est, à son tour, détenu par le thread suivant dans la chaîne.
Un thread attend un objet de synchronisation à partir du moment où le thread demande l’objet jusqu’à ce que le thread l’ait obtenu. Ce « verrou » est détenu par un thread à partir du moment où le thread l’acquiert, jusqu’à ce que le thread le libère. En d’autres termes, lorsque le thread 1 attend un verrou détenu par le thread 2, le thread 1 est en attente de thread 2.
WCT prend en charge les primitives de synchronisation suivantes :
- Appel de procédure locale avancée (ALPC)
- COM (Component Object Model)
- Sections critiques
- Mutex
- SendMessage
- Opérations d' attente sur les processus et les threads
Pour récupérer la chaîne d’attente pour un ou plusieurs threads, créez une session WCT à l’aide des fonctions OpenThreadWaitChainSession et GetThreadWaitChain . Les sessions WCT sont représentées par un handle de type HWCT.
Les sessions peuvent être synchrones ou asynchrones.
Les sessions synchrones ne peuvent pas être annulées et bloquent le thread appelant, jusqu’à ce qu’une chaîne d’attente ait été récupérée.
Les sessions asynchrones ne bloquent pas le thread appelant et peuvent être annulées par l’application à l’aide de la fonction CloseThreadWaitChainSession . Les résultats des opérations asynchrones sont rendus disponibles par le biais d’une fonction de rappel WaitChainCallback fournie par l’application.
Pour les sessions asynchrones, l’appelant peut spécifier un pointeur vers une structure de données de contexte via GetThreadWaitChain (ce même pointeur est passé à la fonction de rappel WaitChainCallback ).
La structure des données de contexte est définie par l’utilisateur et opaque à WCT. Il peut être utilisé par l’application pour communiquer le contexte entre une requête WCT et une fonction de rappel. En général, vous transmettez un handle d’événement via cette structure et, lorsque le rappel est exécuté, cet événement est signalé et un thread d’analyse est informé que la requête a été effectuée.
Pour obtenir un exemple de parcours de chaîne d’attente, consultez utilisation de WCT .
Rubriques connexes
Utilisation de WCT, référence WCT, MSDN Magazine 2007 juillet-Bugslayer : wait chaîne Traversal