begin
integer ЧПБ, РБ, ЗП;
ЧПБ:=0; РБ:=1; ЗП:=0;
parbegin
производитель: begin
n1: производство новой порции;
P(РБ);
добавление новой порции к буферу;
ЧПБ:=ЧПБ+1;
if (ЧПБ=0) then begin V(РБ); V(ЗП); end
else V(РБ);
goto n1;
end;
потребитель: begin
n2: P(РБ);
ЧПБ:=ЧПБ-1;
if (ЧПБ=-)1 then begin V(РБ); P(ЗП); P(РБ); end;
взятие порции из буфера;
V(РБ);
обработка взятой порции;
goto n2;
end;
parend;
Эта программа называется "спящий парикмахер"
Используется два двоичных семафора: работа с буфером и задержка потребителя.
Особенности:
- используются только двоичные семафоры;
- задача взаимного исключения реализуется через семафоры;
- через семафоры реализуется задержка потребителя, которая действует при попытке потребителя читать данные из пустого буфера.