program
version_tres;var p1deseaentrar; p2deseaentrar: boolean;
procedure proceso_uno
begin
while true do
begin
p1deseaentrar:= true;
while p2deseaentrar do;
seccion_critica_uno;
p1deseaentrar:= false;
otras_tareas_uno
end
end;
procedure proceso_dos;
begin
while true do
begin
p2deseaentrar:= true;
while p1deseaentrar do
seccion_critica_uno;
p1deseaentrar:=false;
otras_tareas_uno
end
end
begin
p1deseaentrar:=false;
p2deseaentrar:=false;
parbegin
proceso_uno;
proceso_dos
parend
end.