J'essaie de comprendre les algorithmes de Peterson et Dekker qui sont très similaires et présentent beaucoup de symétries.
J'ai essayé de formuler les algorithmes en langage informel comme suit:
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;
La différence semble être le point où "You can enter next."
se produit et le fait que "if it's your turn I don't want to enter any more."
se produit chez Dekker.
Dans l'algorithme de Peterson, les deux processus semblent être dominants. Un processus semble forcer à entrer dans la section critique à moins que ce soit à son tour.
À l'inverse, dans l'algorithme de Dekker, les deux processus semblent être soumis et polis. Si les deux processus veulent entrer dans la section critique et que c'est au tour de l'autre, le processus décide de ne plus vouloir entrer. (Est-ce nécessaire pour la liberté de famine? Pourquoi?)
En quoi ces algorithmes diffèrent-ils exactement? J'imagine que lorsque les deux processus tentent d'entrer dans la section critique, chez Peterson, le processus dit "j'entre", tandis que dans Dekker, le processus indique "vous pouvez entrer". Quelqu'un peut-il clarifier le comportement des processus dans chaque algorithme? Est-ce que ma façon de le dire en termes informels est correcte?