Mutex срещу Semaphore – Разлика между тях

Ключова разлика между Mutex и Semaphore

  • Mutex е заключващ механизъм, докато Semaphore е сигнален механизъм
  • Mutex е просто обект, докато Semaphore е цяло число
  • Mutex няма подтип, докато семафорът има два вида: семафор за броене и двоичен семафор.
  • Semaphore поддържа модификация на операциите за изчакване и сигнал, докато Mutex се модифицира само от процеса, който може да поиска или освободи ресурс.
  • Semaphore стойността се променя с помощта на операции изчакване () и сигнал (), от друга страна, операциите Mutex се заключват или отключват.

Разлика между Mutex и Semaphore
Разлика между Mutex и Semaphore

Тук анализирах разликата между Mutex и Semaphore и ще оцени изчерпателно техните плюсове и минуси.

Общи факти за Mutex и Semaphore

Въз основа на моята практика, ето няколко общи факта за Mutex срещу Semaphore:

  • Само една задача може да придобие mutex. По този начин mutex има собственост и само собственикът може да го освободи.
  • Причините за използването на mutex и семафор са различни, може би поради сходство в тяхното изпълнение, mutex ще се нарича двоичен семафор.
  • Едно широко известно погрешно схващане е, че Mutexes и Semaphores са почти еднакви, с единствената разлика, че Mutex може да брои до 1, докато Semaphoreможе да брои от 0 до N.
  • Винаги има несигурност между двоичен семафор и мютекс. Може да чуете, че mutex е двоичен семафор, което не е правилно.

Какво е Semaphore?

Семафор е просто променлива, която е неотрицателна и се споделя между нишки. Семафорът е сигнализиращ механизъм и нишка, която чака семафор, може да бъде сигнализирана от друга нишка. Той използва две атомарни операции, 1) изчакване и 2) сигнал за синхронизация на процеса.

A семафор разрешава или забранява достъп до ресурса, което зависи от това как е настроен.

Използване на Semaphore

В случай на единичен буфер, можем да разделим буфера от 4 KB на четири буфера от 1 KB. Semaphore могат да бъдат свързани с тези четири буфера. Това позволява на потребителите и производителите да работят върху различни буфери едновременно.

Предимства на Semaphore

В моята практика ето основните положителни страни от използването на семафор:

  • Позволява достъп на повече от една нишка до критичната секция
  • Semaphoreса независими от машината.
  • Semaphoreса внедрени в машинно-независимия код на микроядрото.
  • Те не позволяват множество процеси да влязат в критичната секция.
  • Тъй като в semaphore има натоварен график за изчакване, никога няма загуба на време и ресурси за процеса.
  • Те са машинно независими, които трябва да се изпълняват в машинно независимия код на микроядрото.
  • Те позволяват гъвкаво управление на ресурсите.

Недостатъци на Semaphores

Ето недостатъците на семафора, които срещнах.

  • Едно от най-големите ограничения на семафора е инверсията на приоритета.
  • Операционната система трябва да следи всички повиквания за изчакване и да сигнализира семафор.
  • Използването им никога не се налага, но е само по конвенция.
  • За да се избегнат блокирания в семафора, Wait и Signal операциите трябва да се изпълняват в правилния ред.
  • Semaphore програмирането е сложен метод, така че има шансове да не се постигне взаимно изключване.
  • Това също не е практичен метод за широкомащабно използване, тъй като използването им води до загуба на модулност.
  • Semaphore е по-податлив на програмни грешки.
  • Може да причини задънена улица или нарушение на взаимното изключване поради грешка на програмиста.

Какво е Mutex?

Пълната форма на Mutex е обект за взаимно изключване. Това е специален тип двоичен семафор, който се използва за контролиране на достъпа до споделения ресурс. Той включва механизъм за наследяване на приоритети, за да се избегнат разширени проблеми с инверсията на приоритета. Позволява текущите задачи с по-висок приоритет да бъдат задържани в блокирано състояние за възможно най-кратко време. Наследяването на приоритет обаче не коригира инверсията на приоритета, а само минимизира нейния ефект.

Използване на Mutex

Мутексът осигурява взаимно изключване, което може да бъде производител или потребител, който може да има ключа (мутекс) и да продължи работата си. Докато производителят запълва буфера, потребителят трябва да изчака и обратно. В Mutex lock през цялото време само една нишка може да работи с целия буфер.

Предимства на Mutex

От това, което наблюдавах, ето основните предимства на Mutex:

  • Мутексите са просто прости ключалки, получени преди да влезете в критичната му секция и след това да я освободите.
  • Тъй като само една нишка е в своята критична секция във всеки даден момент, няма условия за състезание и данните винаги остават последователни.

Недостатъци на Mutex

В моята практика съм идентифицирал няколко недостатъка на Mutex.

  • Ако дадена нишка получи заключване и заспи или бъде изпреварена, тогава другата нишка може да не може да се придвижи напред. Това може да доведе до глад.
  • Не може да бъде заключен или отключен от контекст, различен от този, който го е придобил.
  • Само една нишка трябва да бъде разрешена в критичната секция наведнъж.
  • Нормалната реализация може да доведе до състояние на заето изчакване, което губи време на процесора.

Разлика между Semaphore и Mutex

Въз основа на това, което научих, работейки с тях, ето как Mutexes и Semaphores се различават:

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

Заключение

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