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