Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Med WCT (Wait Chain Traversal) kan felsökare diagnostisera programlåsningar och dödlägen.
En väntekedja är en alternerande sekvens med trådar och synkroniseringsobjekt där varje tråd väntar på det objekt som följer. Varje objekt som följer ägs i sin tur av den efterföljande tråden i kedjan.
En tråd väntar på ett synkroniseringsobjekt från den tidpunkt då tråden begär objektet tills det hämtas. Det här låset ägs av en tråd från det att tråden hämtar det tills tråden släpper det. Med andra ord, när tråd 1 väntar på ett lås som ägs av tråd 2, är tråd 1 väntar på tråd 2.
WCT stöder följande synkroniseringspri primitiver:
- anrop för avancerad lokal procedur (ALPC)
- Microsoft Component Object Model (COM)
- Viktiga avsnittsobjekt
- Mutex-objekt
- Funktionen SendMessage
- Vänta åtgärder på processer och trådar
Om du vill hämta väntekedjan för en eller flera trådar skapar du en WCT-session med funktionerna OpenThreadWaitChainSession och GetThreadWaitChain . WCT-sessioner representeras av ett handtag av typen HWCT.
Sessioner kan vara synkrona eller asynkrona
Du kan inte avbryta synkrona sessioner och blockera den anropande tråden förrän en väntekedja har hämtats.
Asynkrona sessioner blockerar inte den anropande tråden och kan avbrytas av programmet med funktionen CloseThreadWaitChainSession . Resultat från asynkrona åtgärder görs tillgängliga via en WaitChainCallback- återanropsfunktion som tillhandahålls av programmet.
För asynkrona sessioner kan anroparen ange en pekare till en kontextdatastruktur via GetThreadWaitChain. Samma pekare skickas till funktionen WaitChainCallback motringning.
Kontextdatastrukturen är användardefinierad och ogenomskinlig för WCT. Kontextdatastrukturen kan användas av programmet för att kommunicera kontext mellan en WCT-fråga och en återanropsfunktion. Vanligtvis skickar du en händelsereferens genom den här strukturen och när återanropet körs signaleras händelsen och en övervakningstråd informeras om att frågan har slutförts.
Ett exempel på bläddring av väntekedja finns i Using WCT.