Page 132 - 6571
P. 132
ЛЕКЦІЯ 15
ПРИНЦИП РОБОТИ МОНІТОРА ТА ЙОГО
РЕАЛІЗАЦІЯ
15.1 Синтаксис і семантика моніторів
Семафори виступають фундаментальним механізмом синх-
ронізації. Їх використання полегшує програмування взаємного
виключення та сигналізації, причому їх можна застосовувати сис-
тематично при вирішенні будь-яких задач пов’язаних із синхроні-
зацією. Однак семафори представляють собою низькорівневий
механізм синхронізації декількох процесів (використовуючи їх
можна легко наробити помилок). Наприклад, програміст повинен
стежити за тим, щоб випадково не пропустити виклики операцій
P та V або не задати їх більше, ніж потрібно. Можна неправильно
вибрати тип семафора або «захистити» не всі критичні секції.
Семафори глобальні по відношенню до всіх процесів, тому, щоб
змінити роботу семафора або іншої спільної змінної, необхідно
переглянути всю програму. Нарешті, при використанні семафорів
взаємне виключення і умовна синхронізація програмуються за
допомогою однієї і тієї ж пари примітивів, через що важко зрозу-
міти призначення конкретних операторів P та V. Взаємне виклю-
чення і умовна синхронізація – це різні поняття, тому і реалізову-
вати їх краще різними способами.
Монітори – це програмні модулі, які забезпечують більшу
структурованість, ніж семафори, хоча реалізуються так же само
ефективно. У першу чергу, монітори є механізмом абстракції да-
них. Монітор інкапсулює уявлення про абстрактний об’єкт і за-
безпечує набір операцій для його обробки. Монітор містить змін-
ні, що зберігають стан об’єкта, і процедури, що реалізують опе-
рації над ним. Процес отримує доступ до змінних в моніторі тіль-
ки шляхом виклику процедур даного монітора. Взаємне виклю-
чення забезпечується неявно, оскільки процедури в одному моні-
торі не можуть виконуватися паралельно. Це схоже на неявне
взаємне виключення, що гарантується операторами await. Умо-
вна синхронізація в моніторах забезпечується явно за допомогою
умовних змінних (condition variable). Вони аналогічні семафорам,
131