Originariamente inviato da Neptune
Ma io ho visto proprio lo stallings e mi persiste proprio quel dubbio del turno.
Ovvero, quella variabile turno che fa? dice "chi ha maggiore priorità" e se uno ha maggiore priorità e non c'è l'altro in esecuzione può essere eseguito? Cioè non mi è prorpio ben chiaro il cocnetto di funzionamento della variable turno per quanto abbia letto i vari passaggi presenti sullo stallings.
La variabile turno serve semplicemente a sopperire all'insufficienza dei soli due flag booleani. Con i soli flag, incorri nei problemi descritti nel secondo, terzo e quarto tentativo presentati in quel libro (rispettivamente: violazione della mutua esclusione, deadlock e "mutua cortesia", quello di cui dicevo nel post precedente, a causa dell'ipotesi illegittima sulla velocità relativa dei processi).

Con la variabile turno, invece, se il processo 0 trova impostato a true il flag del processo 1 ma vede che il turno è il suo (cioè 0), non fa il cortese come nel "quarto tentativo" ma "reclama" il suo diritto a entrare in sezione critica, questo perché va immediatamente a ricontrollare la condizione del while su flag[1], come se dicesse: "è il mio turno, ti muovi a farmi entrare?". Se invece il turno è 1 e il flag del processo 1 è a true, allora 0 sa di avere torto a insistere e si mette in attesa attiva sul while finché il processo 1 non avrà impostato a 0 la variabile turno.

Insomma "turno" serve a stabilire a chi spetta il diritto di accesso alla sezione critica per evitare che i processi si facciano le cerimonie. E' pur vero però che da sola la variabile sarebbe insufficiente, questo per il problema di stretta alternanza che si avrebbe nel caso del "primo tentativo", oltre che per il problema della starvation di uno dei due processi in caso di morte dell'altro in sezione critica.

Ho anche il tannenbaum ma se dici che non lo riporta nemmeno..
Io ho una versione un po' datata del Tanenbaum e a pag. 96 leggo

Combinando l'idea dei turni con l'idea delle variabili di lock e di warning (avvertimento), un matematico olandese, T. Dekker, fu il primo a trovare una soluzione software al problema della mutua esclusione che non richiedesse l'alternanza stretta [...] Nel 1981, G. L. Peterson scoprì un algoritmo molto più semplice per garantire la mutua esclusione, rendendo obsoleto l'algirotmo di Dekker.
e dopo procede appunto con la descrizione dell'algoritmo di Peterson. Se hai una versione più recente controlla che non sia diversa, anche se credo proprio di no.

Del resto anche Stallings dice:

L'algoritmo di Dekker risolve il problema della mutua esclusione con un programma piuttosto complesso: è difficile da seguire e la dimostrazione della correttezza è complessa. Peterson fornisce una soluzione semplice ed elegante [...]