Составители:
Рубрика:
дверь после стрижки и подождать, пока уйдет посетитель и по-
сле него закрыть дверь; кроме того, п арик махер ждет, если нет
посетителей (находится в состоянии “сна”).
Будем использовать возрастающие счетчики для запоминания
числа процессов, достигших каждого этапа.
У посетителей (client) имеется два важных этапа:
1) пребывание в кресле парикмахера (cinchair);
2) выход из парикмахерской (cleave).
У парикмахера (barber) циклически проходят этапы:
1) освобождение от работы (bavail);
2) стрижка (bbusy);
3) завершение стрижки (bdone).
Все счетчики в начале имеют значение нуль. Поскольку все эта-
пы проходят последовательно, то справедлив следующий инвари-
ант:
C1: cinchair>=cleave
V
bavail>=bbusy>=bdone
С другой стороны нужно учесть следующее:
1) посетитель не может садиться в кресло чаще, чем парик-
махер освобождается от работы;
2) парикмахер не может начинать стрижку чаще, чем посети-
тель садится в его кресло.
C2: cinchair<=bavail
V
bbusy<=cinchair
Кроме того, посетители не могут выходить чаще, чем парикма-
хер завершает стрижку; поэтому
C3: cleave <= bdone
Итак, инвариант монитора имеет вид
BARBER: C1
V
C2
V
C3
Недостаток возрастающих счетчиков: их значения не могут воз-
растать неограниченно. Этого можно избежать, изменив перемен-
ные. В данном случае введем три новые переменные:
barber=bavail-cinchair
chair=cinchair-bbusy
open=bdone-cleave
Все три переменные принимают лишь два значения нуль и единица:
barber =
1, если парикмахер ждет посетителя,
0, если парикмахер обслуживает посетителя.
31
Страницы
- « первая
- ‹ предыдущая
- …
- 28
- 29
- 30
- 31
- 32
- …
- следующая ›
- последняя »