UniTO/anno2/YearI/MCAD/esercizi2019/bomboloni_sol/timer/bomboloni-mon-clock.java
Francesco Mecca c340eec727 mcad portatil
2019-01-23 12:03:37 +01:00

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();
}
}