A seguir: Semáforos Acima: Sincronização com Memória Compartilhada Anterior: Acessos Indivisíveis à Memória
PROGRAM DekkerPeterson;
VAR need: ARRAY[1..2] OF BOOLEAN;
turn: 1..2;
COBEGIN
P1:: LOOP
VAR need1: BOOLEAN;
turn1: 1..2; /* locais ao processo P1 */
...
/* Protocolo de entrada */
< need[1] := TRUE >
< turn := 2 > /* <..> eh atomico */
REPEAT
< need1 := need[2] >;
< turn1 := turn >;
UNTIL (NOT need1) OR (turn1 = 1);
/* regiao critica */
...
/* Protocolo de saida */
< need[1] := FALSE >;
...
END;
//
P2:: LOOP
/* codigo simetrico */
END;