UniTO/anno2/Sem1/Galla/MCAD/esercizi2019/bomboloni_sol/cliente/bomboloni-mon-cliente.java

80 lines
1.2 KiB
Java
Raw Permalink Normal View History

2019-01-23 12:03:37 +01:00
monitor bomboloni{
int b = 0;
condition mario;
condition piero;
condition cliente;
condition codaPiero;
condition rosa;
boolean deveFriggere = false;
public void mario(){
if (!deveFriggere) wait(mario);
if(b>0) <butta i bomboloni>
<friggi bomboloni>
deveFriggere = false;
b=30;
setTimer(60);
signal(piero);
if(!empty(rosa)){
signal(rosa);
}
}
public void piero(){
if (b == 0){
setTimer(0);
wait(piero);
}
if(empty(codaPiero)){ // Se non è ancora arrivato il cliente, Piero si mette in attesa..
wait(cliente);
b--;
<Servi>
}
else{ // ..altrimenti lo serve e lo sveglia
b--;
<Servi>
signal(codaPiero);
}
}
public void rosa(){
deveFriggere = true;
if(!empty(mario)){
signal(mario);
}
else{
wait(rosa);
}
}
public void cliente(){
if(empty(cliente)) wait(codaPiero); // Se Piero non è ancora arrivato si mette in attesa..
else signal(cliente) // ..altrimenti sveglia Piero
}
}
bomboloni alpha;
process piero(){
while(true){
alpha.piero();
}
}
process mario(){
while(true){
alpha.mario();
}
}
process rosa(){
while(true){
waitTimer()
alpha.rosa();
}
}
process cliente(){
alpha.cliente();
<Mangia>
}