//ricevimento 2023 07 05 (luglio) //proposta da Elena e controllata dal prof Monitor conf{ Set nonPresenti = new Set(); //insieme di quelli non presenti Queue relatori = new Queue(); condition ok2presentazione; bool chiama(chiamato){ //se trova il chiamato nella coda relatori, restituisce la condition corrispondente //sblocca il chiamato e aspetta finisca la presentazione if(find(relatori, chiamato)){ c = find(relatori, chiamato).second; c.signal(); ok2presentazione.wait(); return true; // sennò inserisce il chiamato tra i non presenti e restituisce false } else { nonPresenti.insert(chiamato); return false; } } bool arrivato(nome){ //se il nome è tra i chiamati e non presenti restituisce false //sennò aspetta di essere chiamato if(found(nonPresenti, nome)){ nonPresenti.delete(nome); return false; } else { c = new condition; relatori.enqueue(c, nome); c.wait(); } } void finepresentazione(nome){ //rimuove dalla lista dei relatori quello che ha finito e segnala la fine della presentazione relatori.dequeue(nome); ok2presentazione.signal(); } }