Semaphore v.s. Mutex

Összehasonlítás a szemafor és a mutex között.

Mutex

A mutex fogalma nagyjából olyan, mint a lock. Amikor be akarsz lépni egy szobába , akkor meg kell szerezned a zárat, majd a belépési jogosultságot. Az informatikában a mutexet a kritikus szakasz védelmére használják, hogy megakadályozzák más szálak kölcsönös hozzáférését ugyanahhoz a kódhoz, hogy elkerüljék a versenyfeltételeket.

Thread A Thread Bacquire mutex acquire mutex ... it will block 
do something critical do something critical
release mutex release lock

Ez egy kulcs a WC-hez. A kulcsot – a WC-t elfoglalva – egyszerre csak egy személy birtokolhatja. Amikor végzett, az illető átadja (felszabadítja) a kulcsot a soron következő személynek.

Hivatalosan: “A mutexeket tipikusan arra használják, hogy sorba rendezzék a hozzáférést az újra belépő kód olyan szakaszához, amelyet egynél több szál nem tud egyidejűleg végrehajtani. Egy mutex objektum csak egy szálat enged be egy ellenőrzött szakaszba, és arra kényszeríti a többi szálat, amely megpróbál hozzáférni az adott szakaszhoz, hogy megvárja, amíg az első szál kilép az adott szakaszból.”
Hivatkozás: Symbian Developer Library

Semaphore

Nem úgy, mint a mutexeket vagy megszerzik, vagy várnak a megszerzésére. A szemafor a kezdeti értéket N>1-re állíthatja be. Ezzel az értékkel korlátozhatjuk, hogy ebben a folyamatban hány felhasználó férhet hozzá a kritikus szakaszhoz.

A fő különbség a szemafor és a mutex között az, hogy a mutexet csak az a felhasználó adhatja ki, aki birtokolja. A szemafor mechanizmusban azonban bármelyik felhasználó jelezhet bármelyik adott szemafornak a kernelben. Ez biztosíthatja a szálak párhuzamosságát.

Az alábbiakban a szemafor koncepcióját mutatjuk be, amikor A szál rendben van, akkor jelzi B szálnak, akkor B szál elkezd valamit csinálni.

Ez a mechanizmus biztosítja a folyamatok párhuzamosságát.

Task A Task B
... Take BinSemaphore <== wait for something
Do Something Noteworthy
Give BinSemaphore do something <== unblocks

A szabad, azonos WC kulcsok száma. Példa: Tegyük fel, hogy van négy WC-nk azonos zárakkal és kulcsokkal. A szemaforszám – a kulcsok száma – kezdetben 4-re van állítva (mind a négy WC szabad), majd a számérték csökken, ahogyan az emberek bejönnek. Ha az összes vécé megtelt, azaz nincs több szabad kulcs, a szemaforszám 0. Most, amikor eq. egy személy elhagyja a vécét, a szemaforszámot 1-re növeljük (egy szabad kulcs), és átadjuk a sorban következő személynek.

Hivatalosan: “A szemafor egy megosztott erőforrás egyidejű felhasználóinak számát korlátozza egy maximális számig. A szálak kérhetnek hozzáférést az erőforráshoz (a szemafor dekrementálása), és jelezhetik, hogy befejezték az erőforrás használatát (a szemafor inkrementálása).”
Hivatkozás: Symbian Developer Library

Rizikók

A mutex használata Priority Inversionnel járhat. Gondosan kell megtervezni a mutexen alapuló forgatókönyvet.

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.