Share via


Parcours de chaîne d’attente

Le parcours de chaîne d’attente (WCT) permet aux débogueurs de diagnostiquer les blocages et les interblocages d’application.

Une chaîne d’attente est une séquence alternée de threads et d’objets de synchronisation où 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’à son acquisition. Ce verrou appartient à un thread à partir du moment où il l’acquiert, jusqu’à ce que le thread le libère. En d’autres termes, lorsque le thread 1 attend un verrou appartenant au thread 2, le thread 1 attend le thread 2.

WCT prend en charge les primitives de synchronisation suivantes :

Pour récupérer la chaîne d’attente d’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

Vous ne pouvez pas annuler les sessions synchrones et bloquer le thread appelant tant qu’une chaîne d’attente n’a pas é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 via 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. La structure de données de contexte peut être utilisée par l’application pour communiquer le contexte entre une requête WCT et une fonction de rappel. En règle générale, vous passez un handle d’événement via cette structure et, lorsque le rappel est exécuté, cet événement est signalé et un thread de surveillance est informé que la requête a été terminée.

Pour obtenir un exemple de traversée de chaîne d’attente, consultez Utilisation de WCT.

Voir aussi