Page 149 - 6571
P. 149
процесного бар’єру тим, що перукар може зустрітися з будь-яким
із відвідувачів.
По-друге, відвідувачеві необхідно очікувати, поки перукар
закінчить його стригти, що визначається відкриттям дверей для
виходу. Нарешті, перед тим, як закрити двері для виходу, перукар
повинен дочекатися, поки піде відвідувач. Таким чином, перукар
і відвідувач проходять через послідовність синхронізованих ета-
пів, що починаються з рандеву.
Найпростіший спосіб для реалізації подібних етапів синхро-
нізації – це використання лічильників з метою запам’ятовування
числа процесів, що досягли кожного з етапів. У відвідувачів є два
важливі етапи: перебування в кріслі перукаря і вихід з перукарні.
Для даних етапів будемо використовувати лічильники з назвами
cinchair та cleave. Перукар циклічно проходить через три
етапи: звільнення від роботи, стрижка і завершення стрижки. Ви-
користаємо для них змінні-лічильники bavail, bbusy та bdone.
Всі лічильники в початковому стані мають значення 0. Оскільки
процеси проходять свої етапи послідовно, то для лічильників за-
довольняється наступний інваріант:
C1: cinchair >= cleave Ùbavail >= bbusy >= bdone
Щоб забезпечити рандеву відвідувача і перукаря перед поча-
тком стрижки, необхідно накласти умову, що відвідувач не може
сісти в крісло перукаря раніше, ніж перукар звільниться від робо-
ти. Крім того, перукар не може почати стрижку раніше, ніж відві-
дувачі сядуть у його крісло. Отже, виконується умова:
С2: cinchair <= bavail Ùbbusy <= cinchair
Нарешті, відвідувачі не можуть виходити з перукарні раніше,
ніж перукар завершить стрижку:
С3: cleave <= bdone
Інваріант монітора для перукарні, таким чином перетворю-
ється в кон’юнкцію трьох предикатів:
BARBER: C1 ÙC2 ÙC3
Значення лічильників, що використовуються для за-
пам’ятовування етапів через які проходять процеси, не можуть
зростати безмежно, оскільки вони лежать в діапазоні значень ти-
пів змінних. Якщо б синхронізація залежала тільки від різниці
148