Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A versenyfeltételek és holtpontok elkerülése érdekében több szálon kell szinkronizálni a hozzáférést a megosztott erőforrásokhoz. Szinkronizálásra is szükség van annak biztosításához, hogy az egymástól függő kód a megfelelő sorrendben legyen végrehajtva.
Számos olyan objektum van, amelynek fogópontjai több szál szinkronizálására használhatók. Ezek az objektumok a következők:
- Konzol bemeneti pufferei
- Események
- Mutexes
- Folyamatok
- Semaphorok
- Szálak
- Időzítők
Az egyes objektumok állapota vagy jelezve van, vagy nincs jelezve. Ha a várakozási függvényekegyikének hívásában ezen objektumok bármelyikének leírót ad meg, a hívószál végrehajtása le lesz tiltva, amíg a megadott objektum állapota nem lesz jelezve.
Néhány ilyen objektum akkor hasznos, ha blokkol egy szálat, amíg valamilyen esemény nem következik be. Például a konzol bemeneti pufferfogantyúja akkor lesz jelezve, ha olvasatlan bemenet van, például billentyűleütés vagy egérgomb kattintása. A folyamat- és szálkezelők akkor vannak jelezve, amikor a folyamat vagy a szál leáll. Ez lehetővé teszi például, hogy egy folyamat gyermekfolyamatot hozzon létre, majd letiltsa a saját végrehajtását, amíg az új folyamat le nem fejeződik.
Más objektumok hasznosak a megosztott erőforrások egyidejű hozzáféréssel szembeni védelmében. Például több szál is rendelkezhet fogópontokkal egy mutex objektumhoz. A megosztott erőforrás elérése előtt a szálaknak meg kell hívniuk az egyik várakozási függvényt, hogy a mutex állapota jelezve legyen. Amikor a mutex jelzést ad, csak egy várakozó szál lesz felszabadítva az erőforrás eléréséhez. A mutex állapota azonnal visszaáll nem jelzettre, így minden más várakozó szál blokkolva marad. Amikor a szál befejezi az erőforrás használatát, a mutex állapotát úgy kell beállítania, hogy jelezze, más szálak hozzáférhetnek az erőforráshoz.
Egyetlen folyamat szálai esetében a kritikus szakaszú objektumok hatékonyabb szinkronizálási módot biztosítanak, mint a mutexek. A kritikus szakaszokat a rendszer a mutexhez hasonlóan használja, hogy egyszerre egy szálat engedélyezhessen a védett erőforrás használatához. A szálak az EnterCriticalSection függvénnyel kérhetik egy kritikus szakasz tulajdonjogát. Ha már egy másik szál tulajdonában van, a rendszer letiltja a kérési szálat. A szál a TryEnterCriticalSection függvénnyel kérheti egy kritikus szakasz kezelését anélkül, hogy blokkolna, ha nem sikerül megszerezni a kritikus szakaszt. Miután megkapta a tulajdonjogot, a szál szabadon használhatja a védett erőforrást. A folyamat többi szálának végrehajtása nem érintett, kivéve ha azok ugyanabba a kritikus szakaszba próbálnak belépni.
A WaitForInputIdle függvény megvárakoztat egy szálat, amíg egy specifikált folyamat elindul és felhasználói bemenetre várakozik, miközben nincs beérkező bemenet. A WaitForInputIdle meghívása hasznos lehet a szülő- és gyermekfolyamatok szinkronizálásához, mivel CreateProcess a gyermekfolyamat inicializálásának befejezése nélkül tér vissza.
További információ: Szinkronizálás.