5 filosofi sono seduti intorno a un tavolo, e alternano momenti in cui pensano a momenti in cui mangiano. Per mangiare, i filosofi hanno bisogno di due bacchette, ma sul tavolo ne sono disponibili solo 5: ciascun filosofo ne ha una condivisa con il filosofo alla sua destra, e una condivisa con il filosofo alla sua sinistra. Di conseguenza, mentre mangia, i filosofi alla sua destra e sinistra non possono mangiare.

Untitled

Più precisamente, un filosofo attraversa ciclicamente tre stati:

  1. pensa
  2. ha fame, quindi cerca di prendere le bacchette
  3. mangia

Una soluzione valida deve fare si che ogni filosofo affamato riesca prima o poi a mangiare, in modo che tutti i filosofi possano continuare all'infinito ad alternare momenti in cui pensano e momenti in cui mangiano.

Nelle istanze concrete di questo problema, i "filosofi" sono processi che competono con altri per delle risorse condivise, le quali possono essere usate solo in mutua esclusione, e ogni processo deve acquisire contemporaneamente più risorse per poter lavorare.

Soluzione con i semafori

Si usano le seguenti strutture dati:

Untitled

Ciascun filosofo $P_i$ esegue la procedura philosopher(i)

Untitled