UniTO/anno2/Galla/MCAD/esercizi2019/bomboloni_sol/bomboloni-rend.java
2019-01-23 12:09:27 +01:00

68 lines
1.6 KiB
Java

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
<butta>
}
<friggi>
setTimer(60);
}
}
}
process Piero{
entry riprendi();
String mess;
while(true){
<attendi clienti>
call vassoio.piero_rosa("piero"); // Comunica al vassoio che deve servire un cliente
<servo 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
}
}