process vassoio{ int b = 0; port String piero_rosa; String mess; port signal rilascio_vassoio; signal s; boolean attesaPiero = false; process pMario; process pPieroRosa; send(b) to mario.friggi; // Chiede a Mario di friggere pMario = receive(s) from rilascio_vassoio; // Aspetta che frigga b = 30; while(true){ pPieroRosa = receive(mess) from piero_rosa; // Aspetta i messaggi da Piero o da Rosa if(mess=="piero"){ b--; if(b==0){ // Se era l'ultimo bombolone.. attesaPiero = true; send("finiti") to pPieroRosa.servi; // ..dice a Piero che sono finiti setTimer(0); // e va a svegliare Rosa } else{ send("non finiti") to pPieroRosa.servi; // altrimenti dice a Piero che ci sono ancora bomboloni } } else if(mess=="rosa"){ send(b) to mario.friggi; // Chiede a Mario di friggere pMario = receive(s) from rilascio_vassoio; // Aspetta che frigga b = 30; send(s) to rosa.rilascio_rosa; // Avverte Rosa che Mario ha fritto if(attesaPiero) { // Se Piero ha venduto l'ultimo ed era in attesa.. attesaPiero = false; send(s) to piero.riprendi; // ..lo sveglia } } } } process Mario{ process p; signal s; port int friggi; int b_rim; while(true){ p = receive(b_rim) from friggi; // Aspetta di essere fritto dal vassoio if(b_rim>0){ // Se c'erano bomboloni scaduti, li butta } setTimer(60); send(s) to p.rilascio_vassoio; // Comunica al vassoio che รจ fritto } } process Piero{ process p; port signal riprendi; signal s; port String servi; String mess; while(true){ send("piero") to vassoio.piero_rosa; // Comunica al vassoio che deve servire un cliente p = receive(mess) from servi; // Aspetta di poter servire if(mess == "finiti"){ // Se il vassoio comunica che i bomboloni sono finiti.. p = receive(s) from riprendi; // ..si mette in attesa di poter riprendere } } } process Rosa{ port signal rilascio_rosa; signal s; process p; while(true){ waitTimer(); send("rosa") to vassoio.piero_rosa; // Avverte il vassoio di far friggere Mario p = receive(s) from rilascio_rosa; // Aspetta che sia fritto } }