Babbo natale dorme nel suo negozio al Polo Nord e non può essere svegliato solo da : (1) tutte le sue nove renne che sono tornate dalle loro vacanze nel Pacifico meridionale o (2) alcuni elfi hanno difficoltà a realizzare giocattoli;
per permettere a Babbo Natale di dormire un po’, solo gli elfi possono svegliarlo quando tre di loro hanno un problema. Quando tre elfi hanno il loro problema risolto, tutti gli altri elfi che desiderano visitare Babbo Natale devo aspettare che quegli elfi ritornino. Se Babbo Natale si sveglia e trova tre elfi che aspettano alla porta del suo negozio, insieme alla ultima renna tornata da i tropici, Babbo natale decide che gli elfi possono aspettare dopo natale, perché è più importante avere la sua slitta pronta. L’ultima renna che arriva deve svegliare Babbo Natale mentre le altre attendono in una capanna riscaldata prima di essere attaccati alla slitta. Quando tre elfi stanno aspettando la risoluzione di un problema, altri elfi devono aspettare per chiedere aiuto al loro torno.
Lo scopo di questo esercizio è di implementare in JAVA una soluzione a questo problema assumendo che Babbo natale, ogni elfo e ogni renna sono rappresentati da uno thread e ciascuno hanno il seguente comportamento:
-
Babbo natale fa un ciclo dove dorme finché le sue nuove renne sono li poi parte per distribuire regali e poi torna a dormire. Mentre dorme può essere svegliato dagli elfi per aiutarli.
-
Un elfo fa un ciclo dove costruisce un giocattolo, incontra un problema, aspetta che Babbo natale risolva il suo problema e torna a costruire un giocattolo.
-
Un renna fa un ciclo dove é in vacanza, va da Babbo natale, quando la distribuzione dei regali è finita, torna in vacanza.
Nella vostra implementazione, ci sarà un unico Babbo natale, esattamente nove renne e un numero di elfi scelto da voi.