Recorrido de cadena de espera
El recorrido de cadena de espera (WCT) permite a los depuradores diagnosticar bloqueos e interbloqueos de la aplicación.
Una cadena de espera es una secuencia alterna de subprocesos y objetos de sincronización donde cada subproceso espera el objeto siguiente. Cada objeto siguiente es, a su vez, propiedad del subproceso posterior de la cadena.
Un subproceso espera un objeto de sincronización desde el momento en que el subproceso solicita el objeto hasta que se adquiere. Este bloqueo es propiedad de un subproceso desde el momento en que el subproceso lo adquiere, hasta que el subproceso lo libera. En otras palabras, cuando el subproceso 1 espera un bloqueo que pertenece al subproceso 2, el subproceso 1 está esperando el subproceso 2.
WCT admite los siguientes primitivos de sincronización:
- Llamada a procedimiento local avanzado (ALPC)
- Modelo de objetos componentes de Microsoft
- Objetos de sección crítica
- Objetos Mutex
- Función SendMessage
- Operaciones de espera en procesos y subprocesos
Para recuperar la cadena de espera de uno o varios subprocesos, cree una sesión WCT mediante las funciones OpenThreadWaitChainSession y GetThreadWaitChain. Las sesiones WCT se representan mediante un identificador de tipo HWCT.
Las sesiones pueden ser sincrónicas o asincrónicas
No puede cancelar sesiones sincrónicas y bloquear el subproceso de llamada hasta que se haya recuperado una cadena de espera.
Las sesiones asincrónicas no bloquean el subproceso de llamada y la aplicación puede cancelarla mediante la función CloseThreadWaitChainSession. Los resultados de las operaciones asincrónicas están disponibles a través de una función de devolución de llamada WaitChainCallback proporcionada por la aplicación.
En el caso de las sesiones asincrónicas, el llamador puede especificar un puntero a una estructura de datos de contexto a través de GetThreadWaitChain. Este mismo puntero se pasa a la función de devolución de llamada WaitChainCallback.
La estructura de datos de contexto la define el usuario y opaca en WCT. La aplicación puede usar la estructura de datos de contexto para comunicar el contexto entre una consulta WCT y una función de devolución de llamada. Normalmente, se pasa un identificador de eventos a través de esta estructura y, cuando se ejecuta la devolución de llamada, este evento se señala y se informa a un subproceso de supervisión de que se ha completado la consulta.
Para obtener un ejemplo de recorrido de cadena de espera, consulte Uso de WCT.