Мутекс проти Семафора: в чому різниця?

Зміст:

Anonim

Що таке семафор?

Семафор - це просто змінна, яка є невід’ємною та поділяється між потоками. Семафор - це сигнальний механізм, і потік, який очікує на семафорі, може сигналізуватися іншим потоком. Він використовує дві атомні операції, 1) очікування та 2) сигнал для синхронізації процесу.

Семафор дозволяє або забороняє доступ до ресурсу, що залежить від способу його налаштування.

У цьому підручнику ви дізнаєтесь:

  • Що таке Mutex?
  • Використання семафору
  • Використання Mutex
  • Різниця між семафором та мутексом
  • Поширені помилки щодо мутексу та семафору
  • Переваги семафору
  • Переваги Mutex
  • Недолік семафорів
  • Недоліки Mutex

Що таке Mutex?

Повною формою Mutex є об’єкт взаємного виключення. Це особливий тип двійкового семафору, який використовується для управління доступом до спільного ресурсу. Він включає механізм пріоритетного успадкування, щоб уникнути розширених проблем інверсії пріоритетів. Це дозволяє зберігати поточні завдання з вищим пріоритетом у заблокованому стані якомога коротше. Однак пріоритетне успадкування не коригує інверсію пріоритету, а лише мінімізує його ефект.

КЛЮЧОВА РІЗНИЦЯ

  • Мютекс - механізм блокування, тоді як Семафор - це механізм сигналізації
  • Mutex - це просто об'єкт, тоді як Semaphore - ціле число
  • Мутекс не має підтипу, тоді як у Семафору два типи, що враховує семафор та двійковий семафор.
  • Semaphore підтримує модифікацію операцій очікування та сигналізації, тоді як Mutex змінюється лише процесом, який може вимагати або звільнити ресурс.
  • Значення семафору модифікується за допомогою операцій wait () та signal (), з іншого боку, операції Mutex блокуються або розблоковуються.

Використання семафору

У випадку одного буфера, ми можемо розділити буфер 4 КБ на чотири буфери 1 КБ. Семафор можна пов’язати з цими чотирма буферами. Це дозволяє користувачам і виробникам одночасно працювати над різними буферами.

Використання Mutex

Мьютекс забезпечує взаємне виключення, яке може бути як виробником, так і споживачем, який може мати ключ (мьютекс) і продовжувати свою роботу. Поки виробник заповнює буфер, користувачеві потрібно почекати, і навпаки. У блоці Mutex постійно лише один потік може працювати з усім буфером.

Різниця між семафором та мутексом

Параметри Семафор Мутекс
Механізм Це різновид сигнального механізму. Це запірний механізм.
Тип даних Семафор - це ціла змінна. Мютекс - це просто об'єкт.
Модифікація Операції очікування та сигналу можуть модифікувати семафор. Він модифікується лише процесом, який може вимагати або звільнити ресурс.
Управління ресурсами Якщо жоден ресурс не є безкоштовним, тоді процес вимагає ресурсу, який повинен виконувати операцію очікування. Слід зачекати, поки кількість семафору не перевищить 0. Якщо він заблокований, процес повинен почекати. Процес слід тримати в черзі. Доступ до цього потрібно здійснювати лише тоді, коли мьютекс розблоковано.
Нитка Ви можете мати кілька програмних потоків. Ви можете мати декілька програмних потоків у mutex, але не одночасно.
Право власності Значення може бути змінено будь-яким процесом звільнення або отримання ресурсу. Блокування об’єкта звільняється лише процесом, який отримав на ньому блокування.
Типи Типи семафорів - це підрахунок семафору та двійковий семафор. Мутекс не має підтипів.
Операція Значення семафору змінюється за допомогою операцій wait () та signal (). Об'єкт Mutex заблоковано або розблоковано.
Заповнення ресурсів Він зайнятий, якщо використовуються всі ресурси, а процес, що запитує ресурс, виконує операцію wait () і блокується, поки кількість семафору не стане> 1. У випадку, якщо об'єкт уже заблоковано, процес, що запитує ресурси, чекає і система потрапляє в чергу до випуску блокування.

Загальні факти про мутекс та семафор

Ось декілька поширених фактів про мутекс і семафор:

  • Лише одне завдання може отримати мутекс. Отже, існує власність, пов’язана з мьютексом, і лише власник може звільнити мьютекс.
  • Причини використання мьютексу та семафору різні, можливо через схожість у їх реалізації, мьютекс буде називатися бінарним семафором.
  • Одне з широко відомих помилок полягає в тому, що мутекси та семафори майже однакові, з тією лише різницею, що мутекс здатний рахувати до 1, тоді як семафори здатні від 0 до N.
  • Між бінарним семафором і мьютексом завжди існує невизначеність. Ви можете почути, що мьютекс - це двійковий семафор, що неправильно.

Переваги семафору

Ось плюси / переваги використання Semaphore:

  • Це дозволяє більше одного потоку отримати доступ до критичного розділу
  • Семафори не залежать від машини.
  • Семафори реалізовані в незалежному від машини коді мікроядра.
  • Вони не дозволяють декільком процесам потрапляти в критичний розділ.
  • Оскільки в семафорі зайнято очікування, ніколи не трачаться витрат часу та ресурсів.
  • Вони незалежні від машини, і їх слід запускати в незалежному від машини коді мікроядра.
  • Вони дозволяють гнучке управління ресурсами.

Переваги Mutex

Тут важливі плюси / переваги Mutex

  • Мьютекси - це просто прості замки, отримані перед входом у критичну секцію, а потім випуском.
  • Оскільки на даний момент у критичному розділі знаходиться лише один потік, відсутні умови перегонів, і дані завжди залишаються незмінними.

Недолік семафорів

Тут є мінуси / недоліки семафору

  • Одним з найбільших обмежень семафору є інверсія пріоритетів.
  • Операційна система повинна відстежувати всі дзвінки на очікування та подавати сигнал семафору.
  • Їх використання ніколи не забезпечується, але це лише за домовленістю.
  • Щоб уникнути тупикових ситуацій у семафорі, операції очікування та сигналу потрібно виконувати у правильному порядку.
  • Програмування семафору є складним методом, тому є ймовірність не досягти взаємного виключення.
  • Це також не практичний метод для широкомасштабного використання, оскільки їх використання призводить до втрати модульності.
  • Семафор більш схильний до помилок програміста.
  • Це може спричинити глухий кут або порушення взаємного виключення через помилку програміста.

Недоліки Mutex

Тут є мінуси / недоліки Mutex

  • Якщо нитка отримує замок і переходить у сплячий режим, або вона попереджена, тоді інша нитка може не рухатися вперед. Це може призвести до голоду.
  • Його не можна заблокувати чи розблокувати з іншого контексту, ніж той, який його придбав.
  • Одночасно у критичному розділі повинен допускатися лише один потік.
  • Нормальна реалізація може призвести до зайнятого стану очікування, що витрачає час процесора.