//soluzione es c.1 del prof Davoli monitor porto(){ boolean is_molo_free = true //per la nave boolean is_park_free = true //per il camion int dariempire=0 //per la nave, quanto è ancora da riempire? condition ok2attracca; condition ok2salpa; condition ok2scarica; condition ok2ancora; porto attracca(capacita){ if (is_molo_free == false) ok2attracca.wait() //se il molo è occupato fermati ad aspettare is_molo_free = False //attracca. dariempire = capacita ok2ancora.signal() porto.salpa(){ if (dariempire > 0) ok2salpa.wait() //posso salpare solo se ho saturato la capacità della nave is_molo_free = True //salpa. ok2attracca.signal() //sblocchiamo le navi in attesa del molo libero porto scarica(quantita){ if (is_park_free == false) ok2scarica.wait() //se il parcheggio è occupato fermati ad aspettare is_park_free = False //parcheggia. while (quantita > dariempire){ //la quantità non può essere versata completamente quantita -= dariempire //metti quello che ci sta sulla nave dariempire = 0 //satura la nave ok2salpa.signal() //lascia andare la nave ok2ancora . wait() //il camion deve aspettare la prossima nave } dariempire -= quantita //metti tutta la capacità del camion sulla nave if (dariempire == 0) //ora la nave è riempita? ok2salpa.signal() is_park_free = True //il camion se ne va ok2scarica.signal; }