Page 135 - 6571
P. 135
15.2 Процедура взаємного виключення та умовні змінні
Процедура взаємного виключення в моніторах забезпечуєть-
ся неявно, а умовна синхронізація програмується за допомогою
так званих умовних змінних.
Спочатку зовнішній процес викликає процедуру монітора.
Вона перебуває в активному стані до того часу, поки деякий про-
цес виконує її оператори. У будь-який момент часу може бути ак-
тивним тільки один екземпляр тільки однієї процедури монітора,
тобто одночасно не можуть бути активними ні два виклики різ-
них процедур, ні два виклики однієї і тієї ж самої процедури.
Процедури моніторів за визначенням виконуються із взаєм-
ним виключенням. Воно забезпечується реалізацією мови, бібліо-
текою або операційною системою, але аж ніяк не програмістом.
На практиці взаємне виключення в мовах і бібліотеках реалізу-
ється за допомогою блокувань і семафорів. В однопроцесорних
операційних системах на основі заборони зовнішніх переривань,
а в багатопроцесорних операційних системах на основі міжпро-
цесорних блокувань і заборони переривань на рівні процесора.
Умовна змінна використовується для припинення роботи
процесу, безпечне виконання якого є неможливим до моменту
переходу монітора в стан, що задовольняє деякій логічній умові.
Умовні змінні також застосовуються для запуску призупинених
процесів, у випадку коли умова набуває значення «істина». Умо-
вна змінна оголошується наступним чином:
cond cv;
Таким чином, cond – це новий тип даних. Умовні змінні можна
оголошувати і використовувати тільки в межах моніторів.
Значенням умовної змінної cv виступає черга призупинених
процесів (черга затримки), яка спочатку є порожньою. Програ-
міст не має можливості безпосередньо звертатися до значення
змінної cv. Замість цього він отримує непрямий доступ до черги
за допомогою декількох спеціальних операцій, описаних нижче.
Процес може запросити стан умовної змінної за допомогою
виклику функції
empty(cv);
134