monitor conferenza { bool speaking = false; condition inNext; // tutte le value a false di default Set skipped; // tutte le value a false di default map[string][bool] arrived; map[string][condition] speak; process entry bool chiama(name string) { if(speaking) inNext.wait(); if(arrived[name]) speak.signal(); speaking.wait(); return true; else return false; } process entry void arrivato(name string) { if(skipped[name]) return false; else arrived[name] = true; speak[name].wait(); speaking = true; } process entry void finepresentazione(name string) { speaking = false; arrived[name] = false; inNext.signal(); } }