next up previous contents
Next: Könyvtárak thread-biztossága Up: POSIX-threadek Previous: POSIX thread-attributumok

POSIX threadek szinkronizációja

A POSIX szabvány a threadek szinkronizációjára két alapveto eszközt biztosít: a mutexeket és az orfeltétel-változókat.

Egy mutex általában a szabad és a foglalt állapotok valamelyikében van, és a mutexeket két muvelettel lehet manipulálni: a LOCK és az UNLOCK. A LOCK muvelet a szabad mutexet foglaltra állítja, a foglalt mutexnél pedig addig várakozik a program, amíg a mutex szabaddá nem válik, és azután állítja foglaltra a mutexet. Az UNLOCK muvelet a mutexet szabadra állítja. Megjegyezzük, hogy mind a LOCK mind pedig az UNLOCK muveletnél leírtak atomi, oszthatatlan módon történnek, ezért egy szabad mutexet két egymástól független LOCK semmiképpen nem állíthat foglalttá: ilyenkor eloször csak az egyik LOCK lesz sikeres, majd miután a sikeres LOCK-ot végrehajtó kiadja az UNLOCK-ot, azután fogja a másik ( LOCK-ra várakozó) a mutex állapotát foglalttá módosítani. (A mutex lényegében egy bináris szemafor funkcióját valósítja meg; a LOCK és az UNLOCK pedig a P/V szemaformuveleteket implementálják.)

Az orfeltétel-változókat hosszabb várakozások esetén érdemes használni. A mutexeket csak rövid ideig tartó, threadek közti kölcsönös kizárás megszervezésére használjuk, és egy mutexet foglaló threadet soha ne várakoztassuk meg hosszabb ideig.



Csizmazia Balazs
Tue Apr 2 00:06:27 MET DST 1996