Wzajemne wykluczanie (Algorytm Petersona)

Uruchamiamy współbieżnie dwa następujące procesy.

process P1;
begin
  while (true) do
  begin
    sekcja_lokalna;
    protokol_wstepny;
    rejon_krytyczny;
    protokol_koncowy;
  end;
end;

process P2;
begin
  while (true) do
  begin
    sekcja_lokalna;
    protokol_wstepny;
    rejon_krytyczny;
    protokol_koncowy;
  end;
end;

Chcemy zapewnić, że w tym samym czasie co najwyżej jeden z nich wykonuje fragment programu oznaczony rejon_krytyczny. Jakie instrukcje należy umieścić w protokołach, aby zrealizować ten cel?