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