Procházení řetězce čekání
Procházení řetězce čekání (WCT) umožňuje ladicím programům diagnostikovat zablokování aplikací a zablokování.
řetězec čekání je střídavá posloupnost vláken a synchronizačních objektů, kde každé vlákno čeká na objekt, který následuje. Každý následující objekt je vlastněn následným vláknem v řetězci.
Vlákno čeká na synchronizační objekt od okamžiku, kdy vlákno požaduje objekt, dokud ho nezíská. Tento zámek je vlastněn vláknem od doby, kdy ho vlákno získá, dokud ho vlákno nepustí. Jinými slovy, když vlákno 1 čeká na zámek vlastněný vláknem 2, vlákno 1 je čeká pro vlákno 2.
WCT podporuje následující primitivy synchronizace:
- rozšířené místní volání procedur (ALPC)
- modelu COM (Microsoft Component Object Model)
- objekty kritického oddílu
- objekty Mutex
- funkce SendMessage
- operace čekání na procesy a vlákna
Pokud chcete načíst řetězec čekání pro jedno nebo více vláken, vytvořte relaci WCT pomocí funkcí OpenThreadWaitChainSession a GetThreadWaitChain. Relace WCT jsou reprezentovány popisovačem typu HWCT.
Relace můžou být synchronní nebo asynchronní.
Synchronní relace nemůžete zrušit a blokovat volající vlákno, dokud se nenačte řetězec čekání.
Asynchronní relace neblokují volající vlákno a aplikace ji může zrušit pomocí funkce CloseThreadWaitChainSession. Výsledky asynchronních operací jsou zpřístupněny prostřednictvím WaitChainCallback funkce zpětného volání poskytované aplikací.
U asynchronních relací může volající určit ukazatel na kontextovou datovou strukturu prostřednictvím GetThreadWaitChain. Stejný ukazatel se předá WaitChainCallback funkci zpětného volání.
Kontextová datová struktura je definovaná uživatelem a neprůspatná pro WCT. Kontextovou datovou strukturu může aplikace použít ke komunikaci kontextu mezi dotazem WCT a funkcí zpětného volání. Obvykle předáváte obslužnou rutinu události prostřednictvím této struktury a při spuštění zpětného volání je tato událost signalizována a vlákno monitorování je informováno, že dotaz byl dokončen.
Příklad procházení řetězce čekání naleznete v tématu Použití WCT.
Viz také
- pomocí WCT
- referenční WCT
- MSDN Magazine 2007 Červenec - Bugslayer: Wait Chain Traversal