80 lines
1.2 KiB
Java
80 lines
1.2 KiB
Java
|
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>
|
||
|
}
|