61 lines
1.3 KiB
Java
61 lines
1.3 KiB
Java
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;
|
|
}
|
|
}
|