Semaphore vs Monitor
Semafor je datová struktura, která se používá k zajištění toho, aby více procesů nemělo přístup k běžnému prostředku nebo kritické sekci současně, v prostředí paralelního programování. Semafory se používají, aby se zabránilo mrtvým zámkům a rasovým podmínkám. Monitor je konstrukt programovacího jazyka, který se také používá k zabránění přístupu více 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?
Semafor 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). Operace čekání blokuje proces, dokud není otevřen semafor a operace signálu umožňuje vstup jinému procesu (vláknu). Každý semafor je spojen s frontou čekajících procesů. Když je operace čekání volána vláknem, pokud je semafor otevřený, vlákno může pokračovat. Pokud je semafor zavřený, když je operace čekání volána vláknem, vlákno je blokováno a musí čekat ve frontě. Operace signálu otevírá semafor a pokud ve frontě již čeká vlákno, je povoleno pokračovat v tomto procesu a pokud ve frontě čekají žádná vlákna, signál je zapamatován pro další vlákna. Existují dva typy semaforů zvané mutexové semafory a počítající semafory. Mutexové semafory umožňují jediný přístup k prostředku a počítání semaforů umožňuje více vláknům přístup k prostředku (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 (které fungují na sdílených datových strukturách) a synchronizaci mezi vyvoláním souběžných procedur. Monitor zajišťuje, že jeho data nejsou vystavena nestrukturovaným přístupům, a zaručuje, že běhounky (které přistupují k datům monitoru prostřednictvím svých postupů) interagují legitimním způsobem. Monitor zaručuje vzájemné vyloučení tím, že umožňuje pouze jednomu vláknu provádět jakoukoli proceduru monitorování 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 monitors a Mesa monitors. Liší se hlavně svou sémantikou plánování.
Jaký je rozdíl mezi Semaphore a Monitorem?
I když se semafory i monitory používají k dosažení vzájemného vyloučení v prostředí paralelního programování, liší se v technikách použitých k dosažení tohoto úkolu. V monitorech 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 jsou distribuovány jako čekání a volání funkce signálu. Při implementaci semaforů je také velmi snadné udělat chybu, zatímco při implementaci monitorů je velmi malá šance udělat chybu. Monitory dále používají proměnné podmínek, zatímco semafory nikoli.