Semaphore vs Mutex
Semaphore je dátová štruktúra, ktorá sa používa na zabezpečenie toho, aby viacero procesov nepristupovalo súčasne k spoločnému prostriedku alebo ku kritickej sekcii v paralelných programovacích prostrediach. Semafory sa používajú na zabránenie mŕtvym zámkom a rasovým podmienkam. Mutex (Mutual Exclusion Object) sa tiež používa na zabránenie prístupu k spoločnému prostriedku súčasne pomocou niekoľkých súbežných procesov.
Čo je semafor?
Semaphore je dátová štruktúra, ktorá sa používa na zabezpečenie vzájomného vylúčenia kritických častí. Semafory podporujú najmä dve operácie nazývané čakanie (historicky známe ako P) a signál (historicky známe ako V). Čakacia operácia blokuje proces, dokiaľ nie je semafor otvorený a operácia signálu neumožňuje vstup do iného procesu (vlákna). Každý semafor je spojený s radom čakacích procesov. Ak je operácia čakania vyvolaná vláknom, ak je semafor otvorený, vlákno môže pokračovať. Ak je semafor uzavretý, keď je operácia čakania vyvolaná vláknom, vlákno je zablokované a musí čakať vo fronte. Operácia signálu otvára semafor a ak už existuje vlákno čakajúce vo fronte, tento proces môže pokračovať a ak vo fronte nie sú žiadne vlákna, je signál zapamätaný pre ďalšie vlákna. Existujú dva typy semaforov nazývané mutexové semafory a počítajúce semafory. Mutexové semafory umožňujú jediný prístup k prostriedku a počítanie semaforov umožňuje prístup k prostriedku s viacerými vláknami (ktorý má k dispozícii niekoľko jednotiek).
Čo je mutex?
Po spustení počítačovej aplikácie sa vytvorí mutex a pripojí sa k prostriedku. Ak prostriedok používa vlákno, je zamknutý a ostatné vlákna ho nemôžu použiť. Ak chce rovnaké vlákno použiť rovnaké vlákno, bude musieť podať žiadosť. Potom sa toto vlákno umiestni do frontu, kým sa prvé vlákno neskončí pomocou prostriedku. Po dokončení prvého vlákna pomocou prostriedku bude zámok odstránený a vlákno čakajúce vo fronte môže získať prístup k prostriedku. Ak vo fronte čaká viac vlákien, získa sa im rotačný prístup. Prakticky, keď mutex strieda prístup k prostriedku medzi niekoľkými vláknami, bude to viditeľné, pretože viaceré vlákna spotrebúvajú zdroj súčasne. Z interného hľadiska však k prostriedku v danom čase pristupuje iba jedno vlákno.
Aký je rozdiel medzi Semaphore a Mutex?
Aj keď sa semafory aj mutexové objekty používajú na dosiahnutie vzájomného vylúčenia v prostredí paralelného programovania, majú určité rozdiely. Mutexový objekt umožňuje jednému vláknu konzumovať zdroj alebo kritickú sekciu, zatiaľ čo semafory umožňujú obmedzený počet simultánnych prístupov k prostriedku (pod maximálnym povoleným počtom). V prípade mutexových objektov musia iné vlákna, ktoré chcú mať prístup k prostriedku, čakať vo fronte, kým sa súčasné vlákno nedokončí pomocou prostriedku..