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:
- Chamada de procedimento local avançada (ALPC)
- Modelo de objeto de componente da Microsoft (COM)
- Objetos de seção críticos
- Objetos Mutex
- Função SendMessage
- Operações de espera em processos e threads
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
- Usando o WCT
- Referência do WCT
- Bugslayer: Travessia da cadeia de espera da MSDN Magazine
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de