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;
차이점은 Dekker 's 에서 "You can enter next."
발생 하는 지점 과 사실입니다 "if it's your turn I don't want to enter any more."
.
Peterson의 알고리즘에서 두 프로세스가 우세한 것 같습니다. 프로세스는 다른 쪽이 아닌 한 중요한 부분으로 들어가는 것처럼 보입니다.
반대로, Dekker의 알고리즘에서 두 프로세스는 복종적이고 정중 한 것으로 보입니다. 두 프로세스가 모두 임계 섹션에 들어가기를 원하고 다른 프로세스가되면 더 이상 들어 가지 않기로 결정합니다. (이것은 기아 자유에 필요한가? 왜인가?)
이 알고리즘은 정확히 어떻게 다릅니 까? Peterson의 프로세스에서 두 프로세스가 모두 임계 섹션에 들어 가려고하면 프로세스에 "I enter"가 표시되고 Dekker의 프로세스에 "You may enter"가 표시됩니다. 누군가가 각 알고리즘에서 프로세스가 동작하는 방식을 정리할 수 있습니까? 비공식적 인 용어로 표현하는 방식이 올바른가요?