Ich versuche, die Algorithmen von Peterson und Dekker zu verstehen, die sehr ähnlich sind und viele Symmetrien aufweisen.
Ich habe versucht, die Algorithmen in informeller Sprache wie folgt zu formulieren:
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;
Der Unterschied scheint der Punkt zu sein, an dem er "You can enter next."
auftritt, und die Tatsache, dass er "if it's your turn I don't want to enter any more."
bei Dekker auftritt.
In Petersons Algorithmus scheinen die beiden Prozesse dominant zu sein. Ein Prozess scheint seinen Weg in den kritischen Bereich zu erzwingen, es sei denn, der andere ist an der Reihe.
Umgekehrt scheinen die beiden Prozesse in Dekkers Algorithmus unterwürfig und höflich zu sein. Wenn beide Prozesse in den kritischen Bereich eintreten möchten und der andere an der Reihe ist, entscheidet der Prozess, dass er nicht mehr eintreten möchte. (Wird dies für Hungerfreiheit benötigt? Warum?)
Wie genau unterscheiden sich diese Algorithmen? Ich stelle mir vor, dass, wenn beide Prozesse versuchen, in den kritischen Bereich zu gelangen, in Petersons der Prozess "I enter" sagt, während in Dekkers Prozess "You may enter" sagt. Kann jemand klären, wie sich die Prozesse in den einzelnen Algorithmen verhalten? Ist meine Art, es informell auszudrücken, richtig?