Sto cercando di capire gli algoritmi di Peterson e Dekker che sono molto simili e mostrano molte simmetrie.
Ho provato a formulare gli algoritmi in un linguaggio informale come segue:
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;
La differenza sembra essere il punto in cui si "You can enter next."
verifica e il fatto che si "if it's your turn I don't want to enter any more."
verifica in Dekker.
Nell'algoritmo di Peterson, i due processi sembrano essere dominanti. Un processo sembra farsi strada nella sezione critica a meno che non sia il turno dell'altro.
Al contrario, nell'algoritmo di Dekker, i due processi sembrano essere sottomessi ed educati. Se entrambi i processi vogliono entrare nella sezione critica, ed è il turno dell'altro, il processo decide di non voler più entrare. (È necessario per la libertà da fame? Perché?)
In che modo differiscono esattamente questi algoritmi? Immagino che quando entrambi i processi provano ad entrare nella sezione critica, in Peterson, il processo dice "I enter", mentre in Dekker il processo dice "Puoi entrare". Qualcuno può chiarire il modo in cui i processi si comportano in ciascun algoritmo? Il mio modo di dirlo in termini informali è corretto?