Já o algoritmo de Peterson é uma simplificação do modelo de Dekker que, com base na junção dos métodos de variável de trava e chaveamento obrigatório, desenvolveu a primeira solução que resolve plenamente o problema da exclusão mútua.

O modelo utiliza duas variáveis, uma para registrar o interesse do processo em acessar a região crítica e outra para controlar a concorrência pelo uso do recurso. A lógica é que, ao decidir entrar na região crítica, o processo manifesta o seu desejo, mas cede a vez para que o outro processo interessado tenha a prioridade no acesso.

Além de garantir a exclusão mútua, o método de Peterson impede que um dos processos fique aguardando para entrar em sua região crítica mesmo quando não há nenhum outro processo executando nesta região. O algoritmo de Peterson, em linguagem C, é exibido abaixo.

    #define FALSE 0
    #define TRUE 1
    #define NPROCESSOS 2 /*Número de Processos*/

    int vez; /*Variável que controla de quem é a vez*/
    int interessado[NPROCESSOS]; /*controla o interesse dos processos em entrar
    na região crítica, inicialmente nenhum processo tem interesse*/

    void entrar_regiao(int processo){
    int outroProcesso; /*Número do processo que está na vez*/
        outroProcesso = 1 – processo;
        interessado[processo] = TRUE; /*demonstra interesse em adentrar a região crítica*/
        vez = processo;

    while (vez == processo && interessado[outroProcesso] == TRUE) /*Espera ociosa*/
        região_critica(); /*acessa a região crítica*/
        }

    void sair_regiao(int processo){
        interessado[processo] == FALSE; /*Sinaliza que saiu da região crítica*/
        }
    }
    
Copyright © 2014 AIEC.