95 lines
No EOL
1.6 KiB
Java
95 lines
No EOL
1.6 KiB
Java
monitor Clock{
|
|
condition attesa;
|
|
int tempo = <tempo di inizializzazione>;
|
|
int sveglia = 0;
|
|
|
|
public void tick(){ // Funzione che incrementa il tempo e controlla se deve svegliare Rosa
|
|
time++;
|
|
if(tempo==sveglia){
|
|
signal(attesa); // Sveglia Rosa dalla waitTimer()
|
|
}
|
|
}
|
|
|
|
public void waitTimer(){
|
|
wait(attesa);
|
|
}
|
|
|
|
public void setTimer(int min){
|
|
if(min == 0){ // Se Piero ha fatto una setTimer(0)..
|
|
signal(attesa); // ..allora sveglio Rosa dalla waitTimer()
|
|
}
|
|
else{
|
|
sveglia = tempo + min; // Altrimenti setto normalmente la sveglia
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
monitor bomboloni{
|
|
int b = 0;
|
|
condition mario;
|
|
condition piero;
|
|
condition cliente;
|
|
condition rosa;
|
|
boolean deveFriggere = false;
|
|
|
|
public void mario(){
|
|
if (!deveFriggere) wait(mario);
|
|
if(b>0) <butta i bomboloni>
|
|
<friggi bomboloni>
|
|
deveFriggere = false;
|
|
b=30;
|
|
clock.setTimer(60);
|
|
signal(piero);
|
|
if(!empty(rosa))signal(rosa);
|
|
}
|
|
|
|
public void piero(){
|
|
if (b == 0){
|
|
clock.setTimer(0);
|
|
wait(piero);
|
|
}
|
|
wait(cliente);
|
|
b--;
|
|
}
|
|
|
|
public void rosa(){
|
|
deveFriggere = true;
|
|
if(!empty(mario)){
|
|
signal(mario);
|
|
}
|
|
else{
|
|
wait(rosa);
|
|
}
|
|
}
|
|
}
|
|
|
|
Bomboloni alpha;
|
|
Clock clock;
|
|
|
|
process piero(){
|
|
while(true){
|
|
alpha.piero();
|
|
<Servi>
|
|
}
|
|
}
|
|
|
|
process mario(){
|
|
while(true){
|
|
alpha.mario();
|
|
}
|
|
}
|
|
|
|
process rosa(){
|
|
while(true){
|
|
clock.waitTimer()
|
|
alpha.rosa();
|
|
}
|
|
}
|
|
|
|
process Tempo{
|
|
while(true){
|
|
<"aspetta un secondcondo">
|
|
clock.tick();
|
|
}
|
|
} |