Составители:
Рубрика:
Глава 3. РАНДЕВУ И АКТИВНЫЕ МОНИТОРЫ
§ 1. Рандеву
Рандеву — особый тип синхронизации, применяемый, например,
при планировании работы головки дискового накопителя. Для на-
глядности эта синхронизация иллюстрируется “задачей о спящем
парикмахере”.
В тихом городке имеется парикмахерская с двумя д верями и
несколькими креслами. Посетитель входит через одну дверь, ждет
в кресле пока освободится парикмахер (если он занят), будит па-
рикмахера (если он свободен), садится в кресло дл я обслуживания
и засыпает (пока его стрижет парикмахер). После стрижки парик-
махер открывает посетителю выходную дверь и закрывает за ним.
Если есть ожидающие посетители, он будит и при глашает в кресло
одного из них. Если н ет посетителей, то парикмахер засыпает.
Посетители и парик махер — это процессы:
посетители — это клиенты, которые запрашивают сервис (“стриж-
ку”);
парикмахер — это сервер, обеспечивающий этот сервис.
Таким образом, рассматриваемые отношения имеют тип “клиент
– сервер”.
В реализации соответствующего монитора можно обойтись тре-
мя процедурами
get_haircut — запрос (“хочу постричься”);
get_next_customer — запрос (“хочу следующего”);
finished_cut — сообщение об окончании (“стрижки”).
Постоянные переменные используются для хранения состояний
процессов и пре доставления “кресел”, в которых клиенты “спят”.
Основная часть здесь — рандеву: для встречи
– парикмахер должен дождаться прихода посетителя;
– посетитель должен дождаться освобождения парикмахера.
Таким образом, ситуация аналогична двухпроцессорному барье-
ру: для продолжения работы к нему должны придти оба процесса;
однако, отличие состоит в том, что в качестве процесса-посетителя
может быть любой процесс, нуждающимся в “стрижке”.
Процесс-посетитель должен ждать, пока парикмахер закроет
дверь после “стрижки”, а процесс-парикмахер должен открыть
30
Страницы
- « первая
- ‹ предыдущая
- …
- 27
- 28
- 29
- 30
- 31
- …
- следующая ›
- последняя »