- - - - CENAPAD-MGCO

contents index A seguir: Semáforos Acima: Acessos Indivisíveis à Memória Anterior: Acessos Indivisíveis à Memória


Algoritmo de Dekker, simplificado por Peterson

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.



Osvaldo Carvalho - Postscript - Comentários?