Nel problema dei 5 filosofi, detto anche dei filosofi a cena, ci sono appunto 5 filosofi che cenano intorno a un tavolo rotondo. Ogni filosofo ha bisogno di due bacchette per mangiare, ma ci sono 5 bacchette (tante quante i filosofi), ciascuna a disposizione di (cioè condivisa tra) due filosofi.
Ogni filosofo opera secondo il seguente ciclo:
Il problema consiste nello sviluppo di un’algoritmo che impedisca situazioni di deadlock o starvation:
Questo problema rappresenta, sotto forma di metafora, una situazione in cui dei thread / processi concorrenti (i “filosofi”) competono per l’uso di risorse limitate, e ciascuno di essi ha bisogno di ottenere (temporaneamente) l’accesso esclusivo a due risorse (”bacchette”) contemporaneamente.
Nella sua versione originale, formulata da Edsger Dijkstra nel 1965, il problema faceva riferimento a processori che entravano in competizione per avere l’uso esclusivo di periferiche (risorse) condivise. La metafora dei filosofi è stata successivamente introdotta da Tony Hoare.
Per iniziare a formulare una possibile soluzione, si applica il metodo di progettazione introdotto in precedenza.
I filosofi (oggeti attivi) verranno implementati come thread.
Invece, le bacchette (oggetti passivi) sono implementabili come monitor, che devono risultare bloccanti quando necessario (ma, come già detto, ciò non è sufficiente).