Robert Love - fejlesztés a linux kernel - 58. oldal

használata szemaforokat

down_interruptible () függvény megpróbálja megragadni a szemafor. Ha ez nem sikerül, a feladat átkerül a készenléti állapotba TASK_INTERRUPTIBLE zászló. A 3. fejezet az anyag csak arra, hogy ez az állapot a folyamat azt jelenti, hogy a munka is vissza a végrehajtás a jelet, és hogy ez a lehetőség általában nagyon értékes. Ha a jel egy időben, amikor a feladat vár a kibocsátás a szemafor, a feladat vissza a végrehajtás és down_interruptible () függvény értéke -EINTR. Egy másik, hogy fontolja meg a függvény a lefelé () függvényt. amely lefordítja a feladat készenléti állapotban van TASK_UNINTERRUPTIBLE zászló. A legtöbb esetben ez nem kívánatos, mivel a folyamat, hogy várja a kiadás a szemafor nem reagál a jelzésekre. Ezért down_interruptible () függvényt sokkal nagyobb mértékben, mint a lefelé () függvényt. Igen, a nevét ezek a funkciók természetesen messze nem ideális.







down_trylock () is használható funkció Capture az említett nem-blokkoló szemafor. Ha a szemafor már le van zárva, a funkció azonnal vissza nulla értéket. Ha sikeres, hogy megragadják a zár nullázódik, és csapdába zár.







Ahhoz, hogy felszabadítsuk a csapdába esett szemafor kell hívni () függvényt. Tekintsük a következő példát.

kezdeti számláló értéke egyenlő 1 * /

Meg kell bemenni tétlen állapot (meredek), amikor elfogták blokkolt

Ki kell használni a szemafor

bábuk

Állapot változók (feltételes változó, befejezése változó) - egy egyszerű eszköz közötti szinkronizáció a két feladat, ami működik kernel módban, ha szükséges, egy másik feladatot küldött jelet, hogy egy esemény történt. Ugyanakkor egy feladat vár a feltétellel változó, míg a másik feladat, hogy ne valami munkát. Ha egy másik feladatot befejezte munkáját, akkor használja a feltétel változót, hogy visszatérjen a végrehajtás folyamatban lévő valamennyi munkáját. Ha ez úgy tűnik, mint egy szemafor művelet ez így van, az ötlet ugyanaz. A valóságban a bábuk csak egy egyszerű megoldást a problémára, amelyre más helyzetekben használja szemaforokat. Például, egy olyan rendszerben, hívás vfork () dummy használjuk, hogy visszatérjen a végrehajtása a szülő folyamat generált végén.

Állapot változók képviselik a szerkezet struct befejezését. amely meghatározott fájl .

Statikusan dummy lehet létrehozni egy makró

Dinamikusan létrehozni egy feltételes változót lehet inicializálni alkalmazásával init_completion () függvény.