Semafor vs Mutex
Semafor je datová struktura, která se používá k zajištění toho, aby více procesů nepřistupovalo současně ke společnému zdroji nebo kritické sekci v paralelních programovacích prostředích. Semafory se používají, aby se zabránilo slepý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 zdroji současně několika souběžnými procesy.
Co je to semafor?
Semafor je datová struktura, která se používá 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). Operace čekání zablokuje proces, dokud se semafor neotevře a operace signálu neumožní vstoupit jinému procesu (vláknu). Každý semafor je spojen s frontou čekajících procesů. Když vlákno volá operaci čekání a je-li semafor otevřený, vlákno může pokračovat. Pokud je semafor uzavřen, když je vláknem volána operace čekání, vlákno je zablokováno a musí čekat ve frontě. Operace signálu otevře semafor, a pokud ve frontě již čeká vlákno, proces může pokračovat a pokud ve frontě žádná vlákna nečekají, signál se zapamatuje pro další vlákna. Existují dva typy semaforů nazývané mutexové semafory a počítací semafory. Semafory Mutex umožňují jediný přístup ke zdroji a počítací semafory umožňují více vláknům přístup ke zdroji (který má k dispozici několik jednotek).
Co je to mutex?
Když se spustí počítačová aplikace, vytvoří mutex a připojí jej ke zdroji. Když je prostředek používán vláknem, je uzamčen a ostatní vlákna jej nemohou používat. Pokud chce jiné vlákno použít stejný prostředek, bude muset podat žádost. Poté bude toto vlákno umístěno do fronty, dokud nebude první vlákno se zdrojem dokončeno. Po dokončení prvního vlákna se zdrojem bude zámek odstraněn a vlákno, které čeká ve frontě, může získat přístup k prostředku. Pokud ve frontě čeká více vláken, je jim udělen přístup na základě rotace. Prakticky, když mutex střídá přístup ke zdroji mezi několika vlákny, bude to viditelné, protože více vláken spotřebovává zdroj současně. Interně však ke zdroji v daný čas přistupuje pouze jedno vlákno.
Jaký je rozdíl mezi Semaforem a Mutexem?
I když se jak semafory, tak mutexové objekty používají k dosažení vzájemného vyloučení v paralelních programovacích prostředích, mají určité rozdíly. Objekt mutex umožňuje pouze jednomu vláknu spotřebovávat zdroj 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 objektů mutex musí ostatní vlákna, která chtějí získat přístup ke zdroji, čekat ve frontě, dokud aktuální vlákno nedokončí používání zdroje.