Rozdíl mezi semaforem a monitorem

Semaphore vs Monitor

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. Monitor je konstrukt programovacího jazyka, který se také používá k zamezení přístupu několika procesů ke společnému zdroji současně, a proto zaručuje vzájemné vyloučení. Monitory k dosažení tohoto úkolu používají podmíněné proměnné.

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 to Monitor?

Monitor je konstrukce programovacího jazyka, která se používá k řízení přístupu ke sdíleným datům. Monitory zapouzdřují sdílené datové struktury, procedury (fungující na sdílených datových strukturách) a synchronizaci mezi vyvoláním souběžných procedur. Monitor zajišťuje, že jeho data nebudou čelit nestrukturovaným přístupům, a zaručuje, že běhouny (které přístup k datům monitoru prostřednictvím svých postupů) spolupracují legitimním způsobem. Monitor zaručuje vzájemné vyloučení tím, že umožňuje pouze jedno vlákno provádět jakýkoli monitorovací postup v daném čase. Pokud se jiné vlákno pokusí vyvolat metodu na monitoru, zatímco vlákno již provádí proceduru na monitoru, je druhá procedura blokována a musí čekat ve frontě. Existují dva typy monitorů s názvem Hoare monitory a Mesa monitory. Liší se hlavně svou sémantikou plánování.

Jaký je rozdíl mezi Semaphore a Monitorem?

Přestože se semafory i monitory používají k dosažení vzájemného vyloučení v prostředích paralelního programování, liší se v technikách používaných k dosažení tohoto úkolu. U monitorů je kód, který se používá k dosažení vzájemného vyloučení, na jednom místě a je strukturovanější, zatímco kód pro semafory je distribuován jako volání čekající a signální funkce. Při implementaci semaforů je také velmi snadné dělat chyby, zatímco implementace monitorů je velmi malá. Monitory dále používají proměnné podmínek, zatímco semafory ne.