-
-
-
CENAPAD-MGCO
A seguir: Semáforos
Acima: Acessos Indivisíveis à Memória
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;
Este é possivelmente o algoritmo mais complexo deste curso; sua correção não deve ser aceita sem o uso de técnicas formais.