Sei sulla pagina 1di 3

Esercizi sui Monitor

Prigione
In una prigione sono detenuti esponenti di N organizzazioni criminali insieme ai
prigionieri comuni.
Ogni giorno è prevista per i detenuti la possibilità di fruire di un periodo di permanenza in un cortile
interno per un tempo T. Tale attività è organizzata in M turni distinti.
Non deve accadere che, quando nel cortile si trovano contemporaneamente membri di clan diversi,
il numero dei membri di un clan superi quello di ciascuno degli altri di più di una unità, per evitare
che possano scoppiare risse.
Si implementi una soluzione usando il costrutto monitor per modellare il problema e si descriva la
sincronizzazione tra i processi.

Ponte
Un ponte, ovviamente stretto, consente il passaggio a veicoli in un solo verso di percorrenza alla
volta.
Inoltre impone un limite fissato di capacità C oltre il quale non possono più essere ammessi veicoli.
Il traffico si presenta nei due versi e solo uno dei due è quello ammesso ad entrare sul ponte in un
certo istante.
È richiesta una soluzione che:
- non blocchi l’accesso in nessun caso a ponte scarico;
- non privilegi una delle due direzioni, in caso di traffico consistente in entrambi i versi.
Ogni veicolo è il solo a conoscere il proprio peso (per esempio grazie ad una funzione miopeso()).
Se il carico corrente più il peso del veicolo supera la capacità C, il veicolo non può accedere.

Pizzeria
Una pizzeria ha N tavoli che possono ospitare 2, 4 o 6 persone ciascuno, più un tavolo comunitario
da 20 posti.
I clienti arrivano in gruppi di massimo 10 persone che, chiaramente non vanno separate. Se è
possibile, un gruppo viene preferibilmente fatto accomodare in uno dei tavoli piccoli cercando di
ottimizzare l'occupazione. (In altre parole cercando di lasciare il minor punto di posti liberi).
Altrimenti il gruppo viene fatto accomodare nel tavolo comunitario insieme ad altri gruppi; infine, se
nemmeno lì c'è posto, il gruppo viene messo in attesa.
Una volta seduti i clienti di un gruppo ordinano e consumano, impiegando per queste operazioni un
tempo che può essere simulato di durata casuale, ed infine libera un tavolo.
Si modelli lo scenario descritto mediante thread in linguaggio Java usando il costrutto monitor
verificando che la soluzione proposta non presenti rinvio indefinito o deadlock.

Fabbrica
Una fabbrica è composta da M unità di produzione di pezzi di base e N unità di assemblaggio di
prodotti finali.
Le M unità producono rispettivamente pezzi P1, P2, ... ,PM (un solo tipo per unità), che vengono
depositati in magazzino per essere poi utilizzati dalle unità di assemblaggio.
Il magazzino ha una capacità limitata per ogni tipo di pezzo, rispettivamente Max P1, Max P2, Max
PM, raggiunta la quale l’unità corrispondente deve aspettare che i pezzi depositati vengano utilizzati
per poter continuare a produrre.
Ogni unità di assemblaggio ha bisogno di un certo numero di pezzi di ciascun tipo che ovviamente
preleva dal magazzino e la quantità dipende dal prodotto finale da assemblare. L’assemblaggio del
prodotto può iniziare solo quando l’unità dispone di tutti i pezzi necessari.
Si descriva la sincronizzazione tra le varie unità e si implementi una soluzione usando il costrutto
monitor.
Chiuse
Un sistema di chiuse mette in comunicazione N canali artificiali su cui scorrono delle imbarcazioni
in entrambe le direzioni.
La chiusa può contenere solo un MAX di imbarcazioni contemporaneamente.
Il livello dell'acqua di ciascuno dei canali si trova ad un livello differente rispetto agli altri e ciascuna
imbarcazione è etichettata con l'indicazione del canale verso cui vuole transitare; una volta arrivata
alla chiusa l'imbarcazione proveniente deve attendere che il sistema porti l'acqua nella chiusa allo
stesso livello di quello del canale su cui si trova l'imbarcazione e, una volta verificato che la chiusa
abbia spazio libero sufficiente, può accedervi.
Non appena la chiusa porta l'acqua a livello del canale di destinazione, l'imbarcazione esce.
La larghezza di ciascun canale è sufficiente per permettere alle imbarcazioni di scorrere in entrambi
le direzioni; le imbarcazioni in uno specifico canale devono accedere alla chiusa nell'ordine in cui
arrivano.
Si modelli lo scenario descritto mediante thread in linguaggio Java usando il costrutto monitor
verificando che la soluzione proposta non presenti rinvio indefinito o deadlock.

Barbiere
Nel negozio di un barbiere vi è una sala d'attesa con un divano contenente al massimo 5 persone e
un'area dove i clienti possono attendere in piedi. Per motivi di sicurezza, all'interno del negozio
possono sostare al massimo N persone contemporaneamente.
Al negozio lavorano tre barbieri, ciascuno con la propria poltrona per il taglio dei capelli.
Se un cliente entra nel negozio quando l'area d'attesa è piena va via senza attendere il proprio turno.
Altrimenti, dapprima si accomoda nell'area di attesa, poi si accomda nel divano e infine viene
chiamato dal barbiere.
Il barbiere serve per primo il cliente in attesa da più tempo, gli taglia i capelli e provvede al pagamento
e al rilascio della ricevuta. Poiché vi è soltanto un registro di cassa, i clienti prima di andare via
devono aspettare il proprio turno per pagare.
Si modelli lo scenario descritto mediante thread in linguaggio Java usando il costrutto monitor
verificando che la soluzione proposta non presenti rinvio indefinito o deadlock.

Biglietteria
Si modelli il sistema informatico per la gestione della biglietteria di uno stadio. Per ciascun evento,
vengono messi in vendita un numero TOT di biglietti totali che possono essere acquistati presso N
diverse rivendite. Ciascun cliente può acquistare fino ad un massimo di MAX biglietti e può scegliere
se pagare in contanti o tramite carta di credito (si simuli un tempo per transazione più breve nel
secondo caso rispetto al primo).
A ciascuna rivendita verrà assegnato inizialmente un lotto di L biglietti (L << TOT); se questi si
esauriscono, la rivendita potrà rifornirsi, a patto che rimangano ancora biglietti disponibili. Alcune
rivendite accettano solo il pagamento mediante carta di credito, mentre altre accettano entrambi i
tipi di pagamento, ma daranno precedenza ai clienti che pagano con carta di credito rispetto a quelli
che pagano in contanti.
Si modelli lo scenario descritto mediante thread in linguaggio Java usando il costrutto monitor
verificando che la soluzione proposta non presenti rinvio indefinito o deadlock.
Deposito
Si supponga di avere un deposito bagagli composto da V vani ognuno dei quali in grado di contenere
N valigie. Gli utenti arrivano con un numero variabile (ma minore di N) di valigie, le depositano e,
dopo un certo tempo, le ritirano.
Tutte le valigie di uno stesso utente devono essere depositate all'interno di un unico vano, ma uno
stesso vano può contenere le valigie di più utenti.
Gli utenti che non riescono a depositare le valigie per problemi di capacità si pongono in attesa che
si liberi dello spazio.
Si modelli lo scenario descritto mediante thread in linguaggio Java usando il costrutto monitor
verificando che la soluzione proposta non presenti rinvio indefinito o deadlock.