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

UptoLike

# - продвижение фронта заполненных ящиков
count=count-1;
ni
}
end BoundedBuffer
Далее приведем модуль, представляющий собой централизован-
ное решение задачи “об обедающих философах”.
РЕАЛИЗАЦИЯ ЗАДАЧИ “ОБ ОБЕДАЮЩИХ ФИЛОСОФАХ”
module Table
op getforks(int), relforks(int);
body
process Waiter {
bool eating[5]=([5] false); # булевский массив
while(true)
# защита может не пропустить, если вилки заняты
in getforks(i) and not(eating[left(i)]) and
not(eating[right(i)]) --> eating[i]=true;
[ ]
relforks(i) --> eating[i]=false;
ni
}
end Table
process Philosopher[i=0 to 4] {
while(true) {
call getforks(i); # запрос вилки
[поесть];
call relforks(i); # освобождение вилки
[поразмышлять];
}
}
Приведем пример модуля сервера времени, аналогичый рас-
смотренному ранее.
85