Várakozási lánc bejárása
A várakozási lánc bejárása (WCT) lehetővé teszi, hogy a hibakeresők diagnosztizálják az alkalmazások lefagyásait és holtpontjait.
A várakozási lánc a szálak és szinkronizálási objektumok váltakozó sorozata, ahol minden szál a következő objektumra vár. Az alábbi objektumok viszont a lánc későbbi szálának tulajdonában lesznek.
A szál attól az időponttól kezdve várja a szinkronizálási objektumot, amikor a szál az objektumot kéri, amíg be nem szerzi. Ez a zárolási egy szál tulajdonában van attól az időponttól kezdve, amíg a szál fel nem oldja azt. Más szóval, ha az 1. szál a 2. szál tulajdonában lévő zárolásra vár, az 1. szál vár a 2. szálra.
A WCT a következő szinkronizálási primitíveket támogatja:
- Speciális helyi eljáráshívás (ALPC)
- Microsoft Component Object Model (COM)
- kritikus szakaszobjektumok
- Mutex-objektumok
- SendMessage függvény
- várakozási műveletek folyamatokon és szálakon
Egy vagy több szál várakozási láncának lekéréséhez hozzon létre egy WCT-munkamenetet az OpenThreadWaitChainSession és GetThreadWaitChain függvények használatával. A WCT-munkameneteket HWCTtípusú fogópont jelöli.
A munkamenetek lehetnek szinkronok vagy aszinkronok
Nem szakíthatja meg a szinkron munkameneteket, és nem tilthatja le a hívó szálat, amíg be nem kéri a várakozási láncot.
Az aszinkron munkamenetek nem tiltják le a hívó szálat, és az alkalmazás megszakíthatja a CloseThreadWaitChainSession függvénnyel. Az aszinkron műveletek eredményei az alkalmazás által biztosított WaitChainCallback visszahívási függvényen keresztül érhetők el.
Az aszinkron munkamenetek esetében a hívó a GetThreadWaitChain segítségével megadhatja a környezeti adatstruktúrára mutató mutatót. Ugyanezt a mutatót továbbítja a WaitChainCallback visszahívási függvénynek.
A környezeti adatstruktúra felhasználó által definiált és a WCT számára átlátszatlan. A környezeti adatstruktúrát az alkalmazás használhatja a WCT-lekérdezések és a visszahívási függvények közötti környezet kommunikációra. Általában egy eseménykezelőt ad át ezen a struktúrán keresztül, és a visszahívás végrehajtásakor a rendszer jelzi ezt az eseményt, és egy monitorozási szál tájékoztatja arról, hogy a lekérdezés befejeződött.
A várakozási lánc bejárására példa: WCT-használata.