Page 109 - 6571
P. 109
V(s): < s = s+1; >
Операція V збільшує значення s на одиницю неподільним
чином. Операція P зменшує значення s, але перед тим вона
спочатку очікує, поки значення s не стане позитивним.
Призупинення виконання процесу і операція віднімання в P є
єдиною неподільною дією. Припустимо, що s – семафор з
поточним значенням 1. Якщо два процеси намагаються
одночасно виконати операцію P(s), то це вдасться зробити
тільки одному із них. Але якщо один процес намагається
виконати операцію P(s), а інший – V(s), то обидві операції
будуть успішно виконані в
непередбачуваному порядку, а кінцевим значенням семафора s
стане 1.
Звичайний семафор може приймати будь-які невід’ємні
значення, двійковий семафор – тільки значення 1 або 0. Це
означає, що операція V для двійкового семафора може бути
виконана, тільки коли його значення рівне 0. Операцію V для
двійкового семафора можна визначити як процедуру очікування,
доки значення семафора стане меншим 1, а потім збільшення
його значення на 1.
Оскільки операції з семафором визначаються в термінах
операторів await, їх формальна семантика випливає
безпосередньо із застосування правила оператора await. Правила
виводу для операцій P та V виходять безпосередньо з правила
оператора await, застосованого до конкретних операторів у
визначенні P та V.
13.2 Основні задачі та методи семафорів
Семафори безпосередньо підтримують реалізацію процедури
взаємного виключення, необхідної, наприклад, для вирішення за-
дачі критичної секції. Крім того, вони забезпечують підтримку
простих форм умовної синхронізації, сигналізуючи про події
пов’язані із роботою процесів. Для вирішення більш складних за-
дач є можливим комбінування описаних вище двох способів за-
стосування семафорів.
1. Задача критичної секції (взаємне виключення). Нагадаємо,
що в задачі критичної секції кожен з n процесів багаторазово ви-
108