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 == i
pronto[i] == pronto[j] == true
pronto[j] == true
e turno == j
, condizione che persiste fino a che $P_j$ si trova nella propria sezione criticapronto[j] == true
e turno == j
pronto[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