ピーターソンとデッカーのアルゴリズムは非常によく似ており、多くの対称性を示しています。
私は次のような非公式言語でアルゴリズムを定式化しようとしました:
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;
違いは、"You can enter next."
発生するポイントと"if it's your turn I don't want to enter any more."
Dekker で発生する事実のようです。
ピーターソンのアルゴリズムでは、2つのプロセスが支配的であるようです。プロセスは、他の人の順番でない限り、クリティカルセクションに彼の方法を強制するようです。
逆に、Dekkerのアルゴリズムでは、2つのプロセスは従順で丁寧なようです。両方のプロセスがクリティカルセクションに入ることを望み、それが他のプロセスの順番である場合、プロセスはもう入らないことを決定します。(これは飢starの自由のために必要ですか?なぜですか?)
これらのアルゴリズムはどの程度正確に異なりますか?ピーターソンの両方のプロセスがクリティカルセクションに入ろうとすると、プロセスは「私は入る」と言い、デッカーのプロセスは「あなたは入る」と言います。誰かが各アルゴリズムでのプロセスの動作を明確にすることはできますか?非公式の用語で表現する私の方法は正しいですか?