Разлика между семафор и монитор

Семафор срещу Монитор

Semaphore е структура от данни, която се използва, за да се гарантира, че множество процеси нямат достъп до общ ресурс или критична секция едновременно, в паралелна среда за програмиране. Семафорите се използват за избягване на мъртви брави и условия на състезание. Мониторът е конструкция на езика за програмиране, която също се използва за избягване на множество процеси, които имат достъп до общ ресурс в същото време, следователно гарантира взаимно изключване. Мониторите използват условни променливи, за да постигнат тази задача.

Какво е семафор?

Semaphore е структура от данни, която се използва за осигуряване на взаимно изключване на критични секции. Семафорите поддържат основно две операции, наречени изчакване (исторически известни като P) и сигнал (исторически известни като V). Операцията за изчакване блокира процес, докато семафорът се отвори и операцията на сигнала позволява да влезе друг процес (нишка). Всеки семафор е свързан с опашка от чакащи процеси. Когато операцията за изчакване се извика от нишка, ако семафорът е отворен, нишката може да продължи. Ако семафорът е затворен, когато операцията за изчакване се извика от нишка, нишката се блокира и тя трябва да изчака на опашката. Операцията на сигнала отваря семафор и ако в опашката вече се чака нишка, този процес е позволен да продължи и ако няма нишки, чакащи в опашката, сигналът се запомня за следващите нишки. Има два типа семафори, наречени мутексни семафори и броищи семафори. Mutex семафорите позволяват един достъп до ресурс, а преброяването на семафор позволява на множество нишки достъп до ресурс (който има няколко единици на разположение).

Какво е монитор?

Мониторът е конструкция на езика за програмиране, която се използва за контрол на достъпа до споделени данни. Мониторите капсулират споделени структури от данни, процедури (които работят върху споделени структури от данни) и синхронизация между паралелни извиквания на процедура. Един монитор гарантира, че неговите данни не са изправени пред неструктуриран достъп и гарантира, че протекторите (които имат достъп до данните на монитора чрез неговите процедури) взаимодействат по законен начин. Мониторът гарантира взаимно изключване, като позволява само една нишка да изпълни всяка мониторна процедура в даден момент. Ако друга нишка се опита да се позове на метод в монитора, докато нишка вече изпълнява процедура в монитора, втората процедура е блокирана и тя трябва да изчака на опашката. Има два вида монитори, наречени монитори на Hoare и монитори на Mesa. Те се различават главно по семантиката на планирането си.

Каква е разликата между Семафор и Монитор?

Въпреки че и семафорите, и мониторите се използват за постигане на взаимно изключване в паралелна среда за програмиране, те се различават в техниките, използвани за постигане на тази задача. В мониторите кодът, който се използва за постигане на взаимно изключване, е на едно място и е по-структуриран, докато кодът за семафори се разпределя като извикване на функция за изчакване и сигнал. Освен това е много лесно да се правят грешки при прилагането на семафори, докато има много малък шанс да направите грешки при прилагането на монитори. Освен това, мониторите използват променливи на състоянието, докато семафорите не.