Основната разлика между семафора и мютекса е, че семафорът е механизъм за сигнализиране, т.е. процесите изпълняват операцията wait () и signal (), за да посочи дали те придобиват или освобождават ресурса, докато Mutex е заключващ механизъм, процесът трябва да придобие заключването на mutex обект, ако иска да придобие ресурса. Има още няколко различия между семафор и мутекс, нека ги обсъдим с помощта на таблицата за сравнение, показана по-долу.
Сравнителна таблица
Основа за сравнение | семафор | Mutex |
---|---|---|
Основен | Семафорът е сигнален механизъм. | Mutex е заключващ механизъм. |
съществуване | Семафор е цяло число. | Mutex е обект. |
функция | Semaphore позволяват на множество програмни нишки да имат достъп до ограничени копия на ресурси. | Mutex позволява на множество програмни нишки да имат достъп до един ресурс, но не и едновременно. |
Собственост | Стойността на семафора може да бъде променена чрез всеки процес, придобиващ или освобождаващ ресурса. | Заключването на обекта на Mutex се освобождава само от процеса, придобил ключалката върху него. |
категоризирам | Семафорът може да бъде категоризиран в семафор и в двоичен семафор. | Mutex не се категоризира допълнително. |
операция | Стойността на семафора се променя чрез операция wait () и signal (). | Обектът Mutex е заключен или отключен от процеса, който изисква или освобождава ресурса. |
Ресурси, заети | Ако се използват всички ресурси, процесът, изискващ ресурс, изпълнява операция wait () и се блокира, докато броят на семафора стане по-голям от един. | Ако мутекс обектът вече е заключен, процесът, изискващ ресурси, изчаква и се чака на опашката от системата, докато се освободи блокировката. |
Определение за семафор
Semaphore е инструмент за синхронизиране на процеси. Семафор е типично целочислена променлива S, която се инициализира с броя на ресурсите в системата и стойността на семафора може да бъде модифицирана само с две функции wait () и signal (), с изключение на инициализацията.
Операцията wait () и signal () модифицират стойността на семафора неделимо . Това означава, че когато процесът модифицира стойността на семафора, никой друг процес не може едновременно да променя стойността на семафора. Семафорът се различава от операционната система в две категории: броене на семафори и двоичен семафор .
При преброяване на семафора, семафорната S стойност се инициализира с броя на ресурсите, налични в системата. Всеки път, когато процес иска да осъществи достъп до ресурса, той изпълнява операцията wait () на семафора и намалява стойността на семафора с единица. Когато освободи ресурса, той изпълнява сигнал () на семафора и увеличава стойността на семафора с единица. Когато броячът на семафора е 0, това означава, че всички ресурси са заети от процесите. Ако процесът трябва да използва ресурс, когато брояч на семафора е 0, той изпълнява wait () и се блокира, докато стойността на семафора стане по-голяма от 0.
В двоичен семафор, стойността на семафора варира между 0 и 1 . Той е подобен на заключването на мутекс, но мутексът е заключващ механизъм, докато семафорът е сигнален механизъм. В двоичен семафор, ако процес иска да осъществи достъп до ресурса, той изпълнява операция wait () на семафора и намалява стойността на семафора от 1 на 0. Когато освобождава ресурса, той изпълнява сигнал () операция на семафора и стъпки неговата стойност до 1. Ако стойността на семафора е 0 и процесът иска да получи достъп до ресурса, той изпълнява операция wait () и се блокира, докато текущият процес, използващ ресурсите, освободи ресурса.
Определение на Mutex
Обектът за взаимно изключване скоро се нарича Mutex. От термина взаимно изключване можем да разберем, че само един процес в даден момент може да има достъп до дадения ресурс. Обектът mutex позволява на многобройните програмни нишки да използват един и същ ресурс, но не едновременно.
Когато дадена програма стартира, тя изисква от системата да създаде обект на мутекс за даден ресурс. Системата създава мутекс обект с уникално име или идентификатор. Всеки път, когато програмната нишка иска да използва ресурса, който заема, блокира мутекс обект, използва ресурса и след употреба, освобождава заключването на мутекс обекта. След това на следващия процес е позволено да придобие заключването на обект на мутекс.
В същото време процесът е придобил блокировката на обекта, който не може да има достъп до този ресурс. Ако обектът mutex вече е заключен, процесът, който желае да придобие заключване на mutex обект, трябва да изчака и да бъде поставен на опашка от системата, докато обектът mutex не бъде отключен.
Ключови разлики между семафор и Mutex
- Семафорът е механизъм за сигнализиране, тъй като операцията wait () и signal (), изпълнявана при семафорна променлива, показва дали процесът придобива ресурса или освобождава ресурса. От друга страна, мутексът е механизъм за заключване, тъй като за придобиване на ресурс процесът трябва да заключи обекта на мутекс и докато освобождава ресурсния процес трябва да отключи мутекс обекта.
- Семафор е типично цяло число, докато mutex е обект .
- Semaphore позволява на множество програмни нишки да получат достъп до крайното копие на ресурсите . От друга страна, Mutex позволява на много нишки от програми да имат достъп до един общ ресурс, но един по един.
- Стойността на променливата на семафора може да бъде модифицирана чрез всеки процес, който придобива или освобождава ресурс чрез изпълнение на операция wait () и signal (). От друга страна, заключването, придобито от обекта на mutex, може да бъде освободено само от процеса, който е придобил заключването на обект mutex.
- Семафорът е от два вида, като се брои семафор и двоичен семафор, който е доста подобен на мутекс.
- Стойността на променливата на семафора се променя от операцията wait () и signal (), с изключение на инициализацията. Обаче обектът за заглушаване е заключен или отключен от процеса, придобиващ или освобождаващ ресурса.
- Ако всички ресурси са придобити от процеса, и нито един ресурс не е свободен, то процесът, желаещ да придобие операция на ресурс, чака () операция на семафорна променлива и се блокира, докато броят на семафора стане по-голям от 0. Но ако мутекс обектът е вече заключен, тогава процесът, желаещ да придобие ресурс, изчаква и получава опашка от системата, докато ресурсът бъде освободен и мутекс обектът се отключва.
Заключение:
Семафор е по-добър вариант в случай, че има многобройни налични ресурси. В случай на единичен споделен ресурс mutex е по-добър избор.