Spero che qualcuno abbia modo di darmi una mano

ELABORATO DI SISTEMI OPERATIVI

Realizzare due implementazioni in C che realizzino con Semafori e Monitor una soluzione

concorrente al seguente problema:

Gli spalatori di neve

Il comune di Cesena manda N operatori a spalare la neve dal cortile dell’università .

Per poter spalare la neve gli operatori devono ottenere una pala e due guanti (il guanto

destro e il guanto sinistro sono indifferenti tra loro), ma le pale in tutto sono M (M < N) e

i guanti disponibili sono in numero pari e sono in tutto P (P < N).

Gli operatori alternano momenti in cui spalano la neve a momenti in cui vanno al punto

ristoro a prendere il caffè alla macchinetta per potersi scaldare.

Quando va a prendere il caffè, l’operatore rilascia la pala e i guanti e un altro operatore

può ottenerli per poter continuare a spalare.

Quando l'operatore ha finito di bere il caffè si mette in attesa di una pala e di due

guanti liberi per poter continuare a spalare. Inizialmente tutte le pale e i guanti sono

liberi e tutti gli operatori stanno bevendo il primo caffè della giornata.

La soluzione proposta deve assicurare il massimo grado di parallelismo, non deve usare

busy waiting, ne generare deadlock o starvation.


Commentare in modo chiaro il codice.