process vassoio{ int b = 0; entry piero_rosa(in String inMess, out String outMess); boolean attesaPiero = false; call mario.friggi(b); // Chiama Mario per friggere b = 30; while(true){ accept piero_rosa(in String inMess, out String outMess) // Aspetta una richiesta da Piero o da Rosa { if(inMess=="piero"){ b--; if(b==0){ // Se era l'ultimo bombolone.. attesaPiero = true; outMess = "finiti"; // setta l'output per dire a Piero che sono finiti setTimer(0); // e va a svegliare Rosa } else{ outMess = "non finiti"; // setta l'output per dire a Piero che non sono finiti } } else if(inMess=="rosa"){ call mario.friggi(b); // Chiede a Mario di friggere b = 30; if (attesaPiero) { // Se Piero ha venduto l'ultimo ed era in attesa.. attesaPiero = false; call piero.riprendi(); // ..lo sveglia } } } } } process Mario{ entry friggi(in int b_rim); while(true){ accept friggi(in int b_rim) // Aspetta di essere fritto dal vassoio { if(b_rim>0){ // Se c'erano bomboloni scaduti, li butta } setTimer(60); } } } process Piero{ entry riprendi(); String mess; while(true){ call vassoio.piero_rosa("piero"); // Comunica al vassoio che deve servire un cliente if (mess == "finiti") { / Se il vassoio comunica che i bomboloni sono finiti.. accept riprendi() // ..si mette in attesa di poter riprendere } } } process Rosa{ while(true){ waitTimer(); call vassoio.piero_rosa("rosa"); // Avverte il vassoio di far friggere Mario } }