Utilizziamo le variabili condivise dei due algoritmi precedenti
Processo $P_i$:
do
{
pronto[i] := true;
turno = j;
while (pronto[j] and turno == j);
sezione critica
pronto[i] = false;
sezione non critica
} while (true);
Soddisfa tutti e tre i requisiti, risolve il problema della sezione critica per due processi
pronto[j] == false o turno == ipronto[i] == pronto[j] == truepronto[j] == true e turno == j, condizione che persiste fino a che $P_j$ si trova nella propria sezione criticapronto[j] == true e turno == jpronto[j] == false, e $P_i$ può entrare nella propria sezione criticapronto[j] == true, se turno == i entra $P_i$, mentre se turno == j entra $P_j$pronto[j] == false e $P_i$ può entrareSezione critica per n processi
Questo algoritmo si basa su uno schema di servizio usato “nelle panetterie”
Al suo ingresso nel negozio, ogni cliente riceve un numero