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

Мутекс проти Семафор

Мютекс аналогічний одному клавіші кімнати. Людина, що тримає ключ, аналогічний нитці, - єдиний, хто може мати доступ до приміщення. Після цього особа, яка має доступ, повинна буде віддати ключ наступній особі в черзі. Тому мютекс може вивільнятися лише тією ниткою, яка його набуває.

Мютекс, як правило, використовується для серіалізації доступу до розділу коду повторюваного "" свого роду коду, який неможливо виконати відразу декількома потоками. У розділ дозволена лише одна нитка. Це змушує інших потоків у черзі чекати. Перш ніж нитка отримає доступ, доведеться почекати, поки нитка не відмовиться від розділу.

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

Зважаючи на це, семафори можуть одночасно сигналізуватися будь-яким потоком або процесом і ідеально підходять для додатків, які потребують синхронізації. Тим не менш, семафори використовуються для ефективного обмеження кількості одночасних користувачів загального ресурсу на основі максимального числа семафорів.

Отже, мютекс може розглядатися як семафор, який має значення одиниці.

Зменшення і збільшення семафору залежать від того, чи запитують потоки доступ до загального ресурсу чи залишають розділ.

Теоретично мутекс і (бінарні) семафори є семантично подібними. Реалізація мутексу може бути здійснена за допомогою семафорів, і так навпаки. Однак у практичному розумінні вони можуть бути дещо іншими.

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

Підсумок:

1. Mutex зазвичай використовується для серіалізації доступу до загального ресурсу, тоді як семафор - це ряд одночасних доступів.

2. Мутекс - це як семафор з кількістю 1.
3. Mutex дозволяє отримати доступ до однієї нитки, тоді як семафори можуть одночасно сигналізуватися будь-якою ниткою або процесом.

4. Семафори ідеально підходять для синхронізації і часто використовуються для сповіщення про події та взаємного виключення, тоді як мютекс застосовується лише для взаємного виключення.