Estoy tratando de entender los algoritmos de Peterson y Dekker que son muy similares y muestran muchas simetrías.
Traté de formular los algoritmos en lenguaje informal como sigue:
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 diferencia parece ser el punto donde "You can enter next."
ocurre y el hecho que "if it's your turn I don't want to enter any more."
ocurre en Dekker's.
En el algoritmo de Peterson, los dos procesos parecen ser dominantes. Un proceso parece abrirse paso en la sección crítica a menos que sea el turno del otro.
Por el contrario, en el algoritmo de Dekker, los dos procesos parecen ser sumisos y educados. Si ambos procesos desean ingresar a la sección crítica, y es el turno del otro, el proceso decide que ya no desea ingresar. (¿Es esto necesario para la libertad de hambre? ¿Por qué?)
¿Cómo difieren exactamente estos algoritmos? Me imagino que cuando ambos procesos intentan ingresar a la sección crítica, en Peterson, el proceso dice "Entro", mientras que en Dekker el proceso dice "Puedes ingresar". ¿Alguien puede aclarar la forma en que se comportan los procesos en cada algoritmo? ¿Es correcta mi forma de expresarlo en términos informales?