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

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

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

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

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

Що таке Мутекс?

Коли запускається комп'ютерна програма, вона створить мютекс і додасть його до ресурсу. Коли ресурс використовується потоком, він блокується, а інші потоки не можуть його використовувати. Якщо інший потік хоче використовувати той самий ресурс, йому доведеться зробити запит. Потім цей потік буде розміщений у черзі, поки перша нитка не буде закінчена з ресурсом. Коли перший потік закінчиться ресурсом, блокування буде знято, і нитка, яка чекає в черзі, зможе отримати доступ до ресурсу. Якщо в черзі чекають декілька потоків, їм надається доступ в обертовій основі. Практично, коли mutex чергує доступ до ресурсу між декількома потоками, це буде видно, оскільки кілька потоків споживають ресурс одночасно. Але внутрішньо лише один потік отримує доступ до ресурсу в даний момент часу.

Чим відрізняється Семафор від Мутекса?

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