Технология программирования для распределенных параллельных систем. Демьянович Ю.К - 29 стр.

UptoLike

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