program
version_cuatro;var p1deseaentrar, p2deseaentrar:boolean;
procedure proceso_uno;
begin
while cierto do
begin
p1deseaentrar:=true;
while p2deseaentrar do
begin
p1deseaentrar:=false;
retraso (aleatorio,algunosciclos);
p1deseaentrar:=true
end;
seccion_critica_uno;
p1deseaentrar:=false;
otras_tareas_uno
end
end;
procedure proceso_dos;
begin
while true do
begin
p2deseaentrar:=true;
while p1deseaentrar do
begin
p2deseaentrar:=false;
retraso (aleatorio,algunosciclos);
p2deseaentrar:=true
end;
seccion_critica_dos;
p2deseaentrar:=false;
otras_tareas_dos
end
end;
begin
p1deseaentrar:=false;
p2deseaentrar:=false;
parbegin
proceso_uno;
proceso_dos
parend
end.