Основна відмінність між семафором і мьютексом полягає в тому, що семафор - це механізм сигналізації, тобто операції, що виконують операцію wait () і signal (), щоб вказати, чи вони отримують або випускають ресурс, а Mutex - механізм блокування mutex об'єкт, якщо він хоче придбати ресурс. Існує ще кілька відмінностей між семафором і мьютекс, давайте обговоримо їх за допомогою діаграми порівняння, показаної нижче.
Діаграма порівняння
Основа для порівняння | Семафор | Mutex |
---|---|---|
Основний | Семафор - це сигнальний механізм. | Mutex - механізм блокування. |
Існування | Семафор - це ціла змінна. | Mutex - це об'єкт. |
Функція | Семафор дозволяє декільком потокам програм отримати доступ до кінцевого екземпляру ресурсів. | Mutex дозволяє множині потоків програм отримати доступ до одного ресурсу, але не одночасно. |
Власність | Значення семафора може бути змінено будь-яким процесом, який отримує або випускає ресурс. | Блокування об'єкта Mutex вивільняється тільки процесом, який придбав блокування на ньому. |
Категоризуйте | Семафор можна розділити на семафори і двійкові семафори. | Mutex не класифікується далі. |
Операція | Значення семафора змінюється за допомогою операції wait () і signal (). | Об'єкт Mutex заблокований або розблокований процесом, що запитує або випускає ресурс. |
Ресурси Зайняті | Якщо використовуються всі ресурси, процес, що запитує ресурс, виконує операцію wait () і сам блок, доки кількість семафорів не перевищить одиницю. | Якщо об'єкт мьютекс вже заблоковано, то процес запиту ресурсів чекає і ставить в чергу система, поки блокування не буде випущено. |
Визначення семафорів
Семафор є інструментом синхронізації процесів. Семафор, як правило, є цілочисельною змінною 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 є об'єктом .
- Семафор дозволяє декільком потокам програм отримати доступ до кінцевого екземпляра ресурсів . З іншого боку, Mutex дозволяє декільком потокам програм отримати доступ до одного загального ресурсу, але за один раз.
- Значення змінної Semaphore може бути змінено будь-яким процесом, який отримує або видаляє ресурс, виконуючи операцію wait () і signal (). З іншого боку, блокування, придбане на об'єкті mutex, може бути звільнено лише процесом, який придбав блокування на об'єкті mutex.
- Семафор мають два типи підрахунку семафора і двійкового семафора, який досить схожий на мьютекс.
- Значення змінної Semaphore змінюється операцією wait () і signal (), крім ініціалізації. Однак об'єкт відключення звуку заблокований або розблокований процесом, який отримує або випускає ресурс.
- Якщо всі ресурси придбані процесом, і жоден ресурс не є вільним, то процес, який бажає придбати ресурс виконує операцію wait () на змінній семафора і сам блокує, поки кількість семафора не перевищить 0. Але якщо об'єкт мьютекс вже є заблокований, тоді процес, який бажає отримати ресурс, чекає і стає в чергу системою, поки ресурс не буде випущений, а об'єкт mutex буде розблоковано.
Висновок:
Semaphore є кращим варіантом у разі наявності декількох екземплярів ресурсів. У випадку єдиного загального ресурсу mutex є кращим вибором.