Составители:
Рубрика:
chair =
(
1, если посетитель уже сел в кресло,
а парикмахер еще не занят,
0, если посетитель обслуживается парикмахером.
open =
1, если выходная дверь открыта,
0, если выходная дверь закрыта.
Имеется четыре условия синхронизации:
1) посетители дожидаются освобождения парикмахера;
2) посетители ждут, пока парикмахер откроет дверь;
3) парикмахер ждет прихода посетителя;
4) парикмахер ждет ухода посетителя.
Для этого потребуется четыре условных переменных:
barber_available получает сигнал при barber>0 (очередь,
ожидающих парикмахера);
chair_occupied получает сигнал при chair>0 (очередь на за-
нятие кресла);
door_open получает сигнал при open>0 (очеред ь, ожидающих
окончание стрижки);
customer_left получает сигнал при open=0 (очередь, окончив-
ших стрижку).
Процессы ждут выполнения условия с помощью операторов
wait, заключенных в циклы. В момент истинности условий выпол-
няется оп ерац ия signal.
monitor Barber_Shop{
int barber=0, chair=0, open=0;
cond barber_available; # barber>0, то signal
cond chair_occupied; # chair>0, то signal
cond door_open; # open>0, то signal
cond customer_left; # open=0, то signal
procedure get_haircut(){
while(barber==0) wait(barber_available);
barber=barber-1;
chair=chair+1;
signal(chair_occupied);
while(open==0) wait(door_open);
open=open-1;
signal(customer_left);
32
Страницы
- « первая
- ‹ предыдущая
- …
- 29
- 30
- 31
- 32
- 33
- …
- следующая ›
- последняя »