UniTO/anno2/YearI/MCAD/esercizi2019/bomboloni_sol/bomboloni-mon.java

62 lines
1.3 KiB
Java
Raw Normal View History

2019-01-23 12:03:37 +01:00
monitor bomboloni{
int b = 0
conditionition mario;
condition piero;
condition cliente;
condition rosa;
boolean deveFriggere = false;
public void mario(){
if (!deveFriggere) wait(mario); // Si blocca in attesa che Rosa lo sblocchi per friggere
if(b>0) <butta i bomboloni> // Se c'erano bomboloni scaduti, li butta
<Friggi bomboloni>
deveFriggere = false;
b=30;
setTimer(60);
signal(piero); // Sblocca Piero
if(!empty(rosa)){ // Se Rosa prende il monitor prima di Mario resterà in attesa e..
signal(rosa); // ..verrà svegliata dopo che Mario ha fritto
}
}
public void piero(){
if (b == 0){ // Quando finiscono i bomboloni..
setTimer(0); // ..sveglia Rosa
wait(piero); // e si mette in attesa
}
wait(cliente);
b--;
}
public void rosa(){
deveFriggere = true; // Se Rosa viene svegliata dobbiamo sicuramente friggere
if(!empty(mario)){ // Se Mario è già arrivato, lo sveglia
signal(mario);
}
else{
wait(rosa); // Altrimenti si mette in attesa che Mario arrivi
}
}
}
bomboloni alpha;
process piero(){
while(true){
alpha.piero;
<Servi>
}
}
process mario(){
while(true){
alpha.mario;
}
}
process rosa(){
while(true){
waitTimer()
alpha.rosa;
}
}