Porovnání mezi semaforem a mutexem.
Mutex
Pojmy týkající se mutexu se podobají zámku. Když chcete vstoupit do místnosti , musíte získat zámek a pak mít oprávnění ke vstupu. V informatice se mutex používá k ochraně kritické sekce, která zabraňuje vzájemnému přístupu jiných vláken ke stejnému kódu, aby se předešlo podmínce závodu.
Thread A Thread Bacquire mutex acquire mutex ... it will block
do something critical do something critical
release mutex release lock
Je to klíč k záchodu. Klíč může mít – obsadit toaletu – v daném okamžiku jen jedna osoba. Když skončí, předá (uvolní) klíč další osobě v pořadí.
Oficiálně: „Mutexy se obvykle používají k serializaci přístupu k části re-entrantního kódu, který nemůže být prováděn současně více než jedním vláknem. Objekt mutex umožňuje přístup do kontrolované sekce pouze jednomu vláknu a nutí ostatní vlákna, která se pokoušejí získat přístup do této sekce, čekat, dokud první vlákno tuto sekci neopustí.“
Ref: Symbian Developer Library
Semaphore
Na mutex se buď získávají, nebo čekají na získání. Semafor může nastavit počáteční hodnotu N>1. Pomocí této hodnoty můžeme omezit, kolik uživatelů v tomto procesu bude mít povolen přístup ke kritické sekci.
Hlavní rozdíl mezi semaforem a mutexem je ten, že mutex může uvolnit pouze uživatel, který jej drží. Ale v mechanismu semaforu může kterýkoli uživatel dát signál kterémukoli konkrétnímu semaforu v jádře. To může zajistit souběžnost vláken.
Níže je uveden koncept semaforu , když je vlákno A v pořádku, pak dá signál vláknu B a vlákno B začne něco dělat.
Tento mechanismus zajišťuje souběžnost v procesu.
Task A Task B
... Take BinSemaphore <== wait for something
Do Something Noteworthy
Give BinSemaphore do something <== unblocks
Je počet volných identických klíčů WC. Příklad: Řekněme, že máme čtyři toalety s identickými zámky a klíči. Počet semaforů – počet klíčů – je na začátku nastaven na 4 (všechny čtyři toalety jsou volné), pak se hodnota počtu snižuje, jak lidé přicházejí. Pokud jsou všechny toalety plné, tj. nezbývají žádné volné klíče, je počet semaforů 0. Nyní, když např. jedna osoba opustí toaletu, je počet semaforů zvýšen na 1 (jeden volný klíč) a předán další osobě ve frontě.
Oficiálně: „Semafor omezuje počet současných uživatelů sdíleného prostředku na maximální počet. Vlákna mohou požádat o přístup k prostředku (dekrementací semaforu) a mohou signalizovat, že používání prostředku ukončila (inkrementací semaforu).“
Ref: Symbian Developer Library
Rizika
Při použití mutexu může dojít k inverzi priorit. Je třeba pečlivě navrhnout scénář založený na mutexu.