Estou tentando entender os algoritmos de Peterson e Dekker que são muito semelhantes e exibem muitas simetrias.
Tentei formular os algoritmos em linguagem informal da seguinte maneira:
Peterson's: "I want to enter." flag[0]=true;
"You can enter next." turn=1;
"If you want to enter and while(flag[1]==true&&turn==1){
it's your turn I'll wait." }
Else: Enter CS! // CS
"I don't want to enter any more." flag[0]=false;
Dekker's: "I want to enter." flag[0]=true;
"If you want to enter while(flag[1]==true){
and if it's your turn if(turn!=0){
I don't want to enter any more." flag[0]=false;
"If it's your turn while(turn!=0){
I'll wait." }
"I want to enter." flag[0]=true;
}
}
Enter CS! // CS
"You can enter next." turn=1;
"I don't want to enter any more." flag[0]=false;
A diferença parece ser o ponto em que "You can enter next."
ocorre e o fato que "if it's your turn I don't want to enter any more."
ocorre no de Dekker.
No algoritmo de Peterson, os dois processos parecem ser dominantes. Um processo parece forçar a entrada na seção crítica, a menos que seja a vez do outro.
Inversamente, no algoritmo de Dekker, os dois processos parecem submissos e educados. Se os dois processos quiserem entrar na seção crítica, e é a vez do outro, o processo decide não querer mais entrar. (Isso é necessário para a liberdade da fome? Por que?)
Como exatamente esses algoritmos diferem? Imagino que, quando os dois processos tentam entrar na seção crítica, na Peterson, o processo diz "eu entro", enquanto na de Dekker o processo diz "Você pode entrar". Alguém pode esclarecer a maneira como os processos se comportam em cada algoritmo? Minha maneira de colocá-lo em termos informais está correta?