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

85 lines
No EOL
2.3 KiB
Java

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
<butta>
}
<friggi>
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){
<attendi clienti>
send("piero") to vassoio.piero_rosa; // Comunica al vassoio che deve servire un cliente
p = receive(mess) from servi; // Aspetta di poter servire
<servo cliente>
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
}
}