Compartilhar via


Passagem da cadeia de espera

A passagem da cadeia de espera (WCT) permite que os depuradores diagnostiquem travamentos e deadlocks do aplicativo.

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

Um thread aguarda 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 está aguardando o thread 2.

O WCT oferece suporte aos seguintes primitivos 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

Você não pode cancelar sessões síncronas e bloquear o thread de chamada até que uma cadeia de espera tenha sido 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 WCT e uma função de retorno de chamada. Geralmente, você passa um identificador de evento por meio dessa 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 passagem da cadeia de espera, consulte Usar WCT.

Confira também