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:
- de chamada de procedimento local avançado (ALPC)
- Microsoft Component Object Model (COM)
- Objetos de seção crítica
- objetos Mutex
- função SendMessage
- Aguarde operações em processos e threads
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
- Usando o WCT
- de referência do WCT
- MSDN Magazine 2007 julho - Bugslayer: Wait Chain Traversal