Partilhar via


Travessia da cadeia de espera

O Wait chain traversal (WCT) 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 onde cada thread aguarda o objeto que se segue. Cada objeto que se segue é, por sua vez, 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 de 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 por um bloqueio que pertence ao thread 2, o thread 1 está aguardando pelo thread 2.

O WCT suporta as seguintes primitivas de sincronização:

Para recuperar a cadeia de espera para um ou mais threads, crie uma sessão WCT usando o OpenThreadWaitChainSession e funções de GetThreadWaitChain. As sessões 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 um WaitChainCallback função de retorno de chamada fornecida pelo aplicativo.

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

A estrutura de dados de contexto é definida pelo usuário e opaca para 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. 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 de cadeia de espera, consulte Usando o WCT.

Ver também