ฉันพยายามที่จะเข้าใจอัลกอริทึมของ Peterson และ Dekker ซึ่งคล้ายกันมากและแสดงความสมมาตรมากมาย
ฉันพยายามกำหนดอัลกอริทึมในภาษานอกระบบดังนี้:
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
ในอัลกอริทึมของ Peterson กระบวนการทั้งสองดูเหมือนจะโดดเด่น กระบวนการดูเหมือนจะบังคับให้เขาเข้าไปในส่วนที่สำคัญเว้นแต่จะเป็นกระบวนการของคนอื่น
ในทางกลับกันในอัลกอริทึมของ Dekker กระบวนการทั้งสองดูเหมือนจะยอมแพ้และสุภาพ หากทั้งสองกระบวนการต้องการเข้าสู่ส่วนที่สำคัญยิ่งและเป็นกระบวนการของอีกฝ่ายหนึ่งกระบวนการจะไม่ต้องการเข้าอีกต่อไป (สิ่งนี้จำเป็นสำหรับการอดอาหาร - อิสระทำไม?)
อัลกอริทึมเหล่านี้แตกต่างกันอย่างไร ฉันจินตนาการว่าเมื่อทั้งสองกระบวนการพยายามเข้าสู่ส่วนที่สำคัญใน Peterson ของกระบวนการบอกว่า "ฉันเข้า" ในขณะที่ Dekker เป็นกระบวนการที่บอกว่า "คุณอาจเข้าสู่" บางคนสามารถอธิบายวิธีที่กระบวนการทำงานในแต่ละอัลกอริทึมได้หรือไม่? วิธีการของฉันในการวางไว้ในเงื่อนไขที่ไม่เป็นทางการ?