Tôi đang cố gắng để hiểu các thuật toán của Peterson và Dekker rất giống nhau và hiển thị rất nhiều đối xứng.
Tôi đã cố gắng xây dựng các thuật toán bằng ngôn ngữ không chính thức như sau:
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;
Sự khác biệt dường như là điểm "You can enter next."
xảy ra và thực tế "if it's your turn I don't want to enter any more."
xảy ra trong Dekker's.
Trong thuật toán của Peterson, hai quá trình dường như chiếm ưu thế. Một quá trình dường như buộc anh ta vào phần quan trọng trừ khi đến lượt người khác.
Ngược lại, trong thuật toán của Dekker, hai quy trình dường như là phục tùng và lịch sự. Nếu cả hai quá trình đều muốn vào phần quan trọng và đến lượt của người khác, quy trình sẽ quyết định không còn muốn vào nữa. (Điều này có cần thiết cho sự tự do đói khát không? Tại sao?)
Chính xác thì các thuật toán này khác nhau như thế nào? Tôi tưởng tượng rằng khi cả hai quá trình cố gắng vào phần quan trọng, trong Peterson, quy trình nói "Tôi nhập", trong khi trong Dekker, quy trình nói "Bạn có thể nhập". Ai đó có thể làm rõ cách các quy trình ứng xử trong mỗi thuật toán? Là cách của tôi để đặt nó trong điều khoản không chính thức?