Page 151 - 6571
P. 151
while (open == 0) wait(door_open);
open = open-1;
signal(customer_left);
}
procedure get_next_customer() {
barber = barber+1;
signal(barber_available);
while (chair == 0) wait(chair_occupied);
chair = chair-1;
}
procedure finished_cut() {
open = open+1;
signal(door_open);
while (open > 0) wait(customer_left);
}
}
У наведеній реалізації монітора використовується процедура
get_haircut, що містить два оператори wait, оскільки відвіду-
вач проходить через два етапи: спочатку він чекає, поки не звіль-
ниться перукар, а потім – поки не закінчиться стрижка.
Запитання для самоперевірки
1. Яку роль відіграє програмний монітор у задачі про читачів
та письменників?
2. Яким чином виконується синхронізація процесів у задачі
про читачів та письменників із використанням моніторів?
3. Яке основне призначення інтервального таймера?
4. У чому полягає принцип роботи інтервального таймера?
5. Що виступає ресурсом у моніторі який реалізує інтерваль-
ний таймер?
6. Який принцип роботи інтервального таймера з покриваю-
чою умовою?
7. Який принцип роботи інтервального таймера з пріоритет-
ним очікуванням?
8. Яке формулювання задачі про сплячого перукаря?
9. У чому полягає суть синхронізації під назвою «рандеву»?
10. Який алгоритм рішення задачі про сплячого перукаря з
використанням програмних моніторів?
150