Problema

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:

  1. pensa per un po’, poi gli viene fame;
  2. cerca di procurarsi le bacchette per mangiare
  3. dopo essere riuscito a prendere le due bacchette, il filosofo mangia per un po’, poi lascia le bacchette e riconincia a pensare.

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.

Applicazione del metodo di progettazione

Per iniziare a formulare una possibile soluzione, si applica il metodo di progettazione introdotto in precedenza.

Oggetti da implementare

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).

Non soluzione