Semaphore vs Mutex
Semaphore je datová struktura, která se používá k zajištění toho, aby více procesů nepřistupovalo současně ke společnému prostředku nebo ke kritické sekci v paralelních programovacích prostředích. Semafory se používají, aby se zabránilo mrtvým zámkům a závodním podmínkám. Mutex (Mutual Exclusion Object) se také používá k zamezení přístupu ke společnému prostředku současně několika souběžnými procesy.
Co je Semafor?
Semaphore je datová struktura, která slouží k vzájemnému vyloučení kritických sekcí. Semafory podporují hlavně dvě operace zvané čekání (historicky známé jako P) a signál (historicky známé jako V). Čekací operace blokuje proces, dokud není semafor otevřený a signální operace neumožňuje vstoupit do jiného procesu (vlákna). Každý semafor je spojen s frontou čekajících procesů. Když je operace čekání vyvolána vláknem, pokud je semafor otevřený, vlákno může pokračovat. Pokud je semafor uzavřen, když je operace čekání vyvolána vláknem, vlákno je blokováno a musí čekat ve frontě. Operace signálu otevírá semafor a pokud již ve frontě čeká vlákno, je tento proces dovolen pokračovat a pokud ve frontě nečekají žádná vlákna, je signál zapamatován pro další vlákna. Existují dva typy semaforů zvané mutexové semafory a počítací semafory. Mutexové semafory umožňují jediný přístup ke zdroji a počítání semaforů umožňuje více vláknům přístup ke zdroji (který má k dispozici několik jednotek).
Co je Mutex?
Po spuštění počítačové aplikace vytvoří mutex a připojí jej ke zdroji. Pokud prostředek používá vlákno, je zamčený a ostatní vlákna ho nemohou použít. Pokud chce jiné vlákno použít stejný prostředek, bude muset podat žádost. Potom bude toto vlákno zařazeno do fronty, dokud první vlákno nebude dokončeno prostředkem. Po dokončení prvního vlákna pomocí prostředku bude zámek odstraněn a vlákno čekající ve frontě může získat přístup ke zdroji. Pokud ve frontě čeká více podprocesů, je jim poskytnut přístup na základě rotace. Prakticky, když mutex střídá přístup ke zdroji mezi několika vlákny, bude to vidět, protože více vláken spotřebovává zdroj současně. Interně však k danému prostředku v daném čase přistupuje pouze jedno vlákno.
Jaký je rozdíl mezi Semaphore a Mutex?
Přestože se semafory i mutexové objekty používají k dosažení vzájemného vyloučení v prostředích paralelního programování, mají určité rozdíly. Objekt mutex umožňuje pouze jednomu vláknu spotřebovat prostředek nebo kritickou sekci, zatímco semafory umožňují omezený počet současných přístupů ke zdroji (pod maximálním povoleným počtem). U mutexových objektů musí další vlákna, která chtějí získat přístup ke zdroji, čekat ve frontě, dokud se aktuální vlákno nedokončí pomocí zdroje..