Препоръчано, 2024

Избор На Редактора

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

Синхронизацията на процесите играе важна роля за поддържането на съгласуваността на споделените данни. И двете софтуерни и хардуерни решения присъстват за справяне с проблема с критични секции. Но хардуерните решения за проблема с критични секции са доста трудни за изпълнение. В днешната статия ще обсъдим две софтуерно базирани решения, за да се справим с проблема с критични секции, т.е. Семафор и Mutex.

Основната разлика между семафора и мютекса е, че семафорът е механизъм за сигнализиране, т.е. процесите изпълняват операцията 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

  1. Семафорът е механизъм за сигнализиране, тъй като операцията wait () и signal (), изпълнявана при семафорна променлива, показва дали процесът придобива ресурса или освобождава ресурса. От друга страна, мутексът е механизъм за заключване, тъй като за придобиване на ресурс процесът трябва да заключи обекта на мутекс и докато освобождава ресурсния процес трябва да отключи мутекс обекта.
  2. Семафор е типично цяло число, докато mutex е обект .
  3. Semaphore позволява на множество програмни нишки да получат достъп до крайното копие на ресурсите . От друга страна, Mutex позволява на много нишки от програми да имат достъп до един общ ресурс, но един по един.
  4. Стойността на променливата на семафора може да бъде модифицирана чрез всеки процес, който придобива или освобождава ресурс чрез изпълнение на операция wait () и signal (). От друга страна, заключването, придобито от обекта на mutex, може да бъде освободено само от процеса, който е придобил заключването на обект mutex.
  5. Семафорът е от два вида, като се брои семафор и двоичен семафор, който е доста подобен на мутекс.
  6. Стойността на променливата на семафора се променя от операцията wait () и signal (), с изключение на инициализацията. Обаче обектът за заглушаване е заключен или отключен от процеса, придобиващ или освобождаващ ресурса.
  7. Ако всички ресурси са придобити от процеса, и нито един ресурс не е свободен, то процесът, желаещ да придобие операция на ресурс, чака () операция на семафорна променлива и се блокира, докато броят на семафора стане по-голям от 0. Но ако мутекс обектът е вече заключен, тогава процесът, желаещ да придобие ресурс, изчаква и получава опашка от системата, докато ресурсът бъде освободен и мутекс обектът се отключва.

Заключение:

Семафор е по-добър вариант в случай, че има многобройни налични ресурси. В случай на единичен споделен ресурс mutex е по-добър избор.

Top