Recorrido de cadena de espera

El recorrido de cadena de espera (WCT) permite a los depuradores diagnosticar bloqueos y 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 que sigue es, a su vez, propiedad del subproceso subsiguiente 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:

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 que llama 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 autor de la llamada 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 se define por el usuario y es 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, se señala este evento 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.

Consulte también