Travessia da cadeia de espera

O WCT (Wait Chain Traversal) permite que os depuradores diagnostiquem travamentos e bloqueios de aplicativos.

Uma cadeia de espera é uma sequência alternada de threads e objetos de sincronização em que cada thread aguarda o objeto a seguir. Cada objeto que se segue é, por sua vez, de propriedade do thread subsequente na cadeia.

Um thread aguarda por um objeto de sincronização desde o momento em que o thread solicita o objeto até que ele seja adquirido. Esse bloqueio pertence a um thread desde o momento em que o thread o adquire, até que o thread o libere. Em outras palavras, quando o thread 1 aguarda um bloqueio que pertence ao thread 2, o thread 1 aguarda o thread 2.

O WCT oferece suporte às seguintes primitivas de sincronização:

Para recuperar a cadeia de espera para um ou mais threads, crie uma sessão WCT usando as funções OpenThreadWaitChainSession e GetThreadWaitChain . As sessões do WCT são representadas por um identificador do tipo HWCT.

As sessões podem ser síncronas ou assíncronas

Não é possível cancelar sessões síncronas e bloquear o thread de chamada até que uma cadeia de espera seja recuperada.

As sessões assíncronas não bloqueiam o thread de chamada e podem ser canceladas pelo aplicativo usando a função CloseThreadWaitChainSession . Os resultados de operações assíncronas são disponibilizados por meio de uma função de retorno de chamada WaitChainCallback fornecida pelo aplicativo.

Para sessões assíncronas, o chamador pode especificar um ponteiro para uma estrutura de dados de contexto por meio de GetThreadWaitChain. Esse mesmo ponteiro é passado para a função de retorno de chamada WaitChainCallback .

A estrutura de dados de contexto é definida pelo usuário e opaca para o WCT. A estrutura de dados de contexto pode ser usada pelo aplicativo para comunicar o contexto entre uma consulta do WCT e uma função de retorno de chamada. Normalmente, você passa um identificador de evento por essa estrutura e, quando o retorno de chamada é executado, esse evento é sinalizado e um thread de monitoramento é informado de que a consulta foi concluída.

Para obter um exemplo de travessia da cadeia de espera, consulte Usando o WCT.

Confira também