Semaphore vs Monitor
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. Monitor je konštrukcia programovacieho jazyka, ktorá sa tiež používa na zabránenie prístupu viacerých procesov k spoločnému zdroju súčasne, a preto zaručuje vzájomné vylúčenie. Monitory na dosiahnutie tejto úlohy používajú podmienené premenné.
Č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 to monitor?
Monitor je konštrukcia programovacieho jazyka, ktorá sa používa na riadenie prístupu k zdieľaným údajom. Monitory zapuzdrujú zdieľané dátové štruktúry, procedúry (ktoré pracujú na zdieľaných dátových štruktúrach) a synchronizáciu medzi vyvolaním súčasných procedúr. Monitor zabezpečuje, aby jeho údaje neboli konfrontované s neštruktúrovanými prístupmi, a zaručuje, že behúne (ktoré prístup k údajom monitora prostredníctvom svojich postupov) spolupracujú legitímnym spôsobom. Monitor zaručuje vzájomné vylúčenie tým, že umožňuje iba jedno vlákno vykonávať akýkoľvek monitorovací postup v danom čase. Ak sa iné vlákno pokúša vyvolať metódu na monitore, zatiaľ čo vlákno už vykonáva procedúru na monitore, druhá procedúra je blokovaná a musí čakať vo fronte. Existujú dva typy monitorov s názvom Hoare monitory a Mesa monitory. Líšia sa hlavne v ich sémantike plánovania.
Aký je rozdiel medzi Semaphore a Monitorom?
Aj keď sa semafory aj monitory používajú na dosiahnutie vzájomného vylúčenia v prostredí paralelného programovania, líšia sa v technikách použitých na dosiahnutie tejto úlohy. Na monitoroch je kód, ktorý sa používa na dosiahnutie vzájomného vylúčenia, na jednom mieste a je štruktúrovanejší, zatiaľ čo kód pre semafory sa distribuuje ako čakanie a volanie funkcie signálu. Pri implementácii semaforov je tiež veľmi ľahké robiť chyby, zatiaľ čo pri implementácii monitorov existuje len malá šanca. Monitory ďalej používajú premenné podmienok, zatiaľ čo semafory nie.