Semafor vs Mutex
Semafor je dátová štruktúra, ktorá sa používa na zabezpečenie toho, aby viaceré procesy nepristupovali súčasne k spoločnému zdroju alebo kritickej časti v paralelných programovacích prostrediach. Semafory sa používajú na to, aby sa vyhli zablokovaniu a pretekárskym podmienkam. Mutex (objekt vzájomného vylúčenia) sa tiež používa na zabránenie prístupu k spoločnému zdroju súčasne niekoľkými súbežnými procesmi.
Čo je to semafor?
Semafor je dátová štruktúra, ktorá sa používa na vzájomné vylúčenie kritických častí. Semafory podporujú hlavne dve operácie nazývané čakanie (historicky známe ako P) a signál (historicky známe ako V). Operácia čakania zablokuje proces, kým sa semafor neotvorí a operácia signálu umožní vstup ďalšiemu procesu (vláknu). Každý semafor je spojený s radom čakajúcich procesov. Keď vlákno zavolá operáciu čakania, ak je semafor otvorený, vlákno môže pokračovať. Ak je semafor zatvorený, keď vlákno zavolá operáciu čakania, vlákno sa zablokuje a musí čakať vo fronte. Operácia signálu otvorí semafor a ak už vo fronte čaká vlákno, tento proces môže pokračovať a ak vo fronte nečakajú žiadne vlákna, signál sa zapamätá pre ďalšie vlákna. Existujú dva typy semaforov nazývané mutexové semafory a počítacie semafory. Semafory Mutex umožňujú jediný prístup k zdroju a počítacie semafory umožňujú viacerým vláknam prístup k zdroju (ktorý má k dispozícii niekoľko jednotiek).
Čo je mutex?
Po spustení počítačovej aplikácie vytvorí mutex a pripojí ho k zdroju. Keď zdroj používa vlákno, je uzamknutý a iné vlákna ho nemôžu používať. Ak iné vlákno chce použiť rovnaký zdroj, bude musieť podať žiadosť. Potom bude toto vlákno umiestnené do frontu, kým prvé vlákno nedokončí zdroj. Keď prvé vlákno skončí so zdrojom, zámok sa odstráni a vlákno, ktoré čaká vo fronte, môže získať prístup k prostriedku. Ak vo fronte čaká viacero vlákien, je im udelený prístup na princípe rotácie. 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. Interne však k zdroju v danom čase pristupuje iba jedno vlákno.
Aký je rozdiel medzi Semaforom a Mutexom?
Aj keď sa semafory aj mutexové objekty používajú na dosiahnutie vzájomného vylúčenia v paralelných programovacích prostrediach, majú určité rozdiely. Objekt mutex umožňuje iba jednému vláknu spotrebovať zdroj alebo kritickú sekciu, zatiaľ čo semafory umožňujú obmedzený počet súčasných prístupov k zdroju (pod maximálnym povoleným počtom). Pri objektoch mutex musia ostatné vlákna, ktoré chcú získať prístup k prostriedku, čakať vo fronte, kým sa nedokončí aktuálne vlákno pomocou prostriedku.