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*/
}
}