UniTO/anno2/YearI/FirstSem/MCAD/esercizi2019/bomboloni_sol/timer/bomboloni-mon-clock.java

95 lines
1.6 KiB
Java
Raw Normal View History

2018-12-03 17:53:23 +01:00
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();
}
}