UniTO/anno2/YearI/MCAD/esercizi2019/bomboloni_sol/bomboloni-sem.java

55 lines
1.4 KiB
Java
Raw Normal View History

2018-12-03 17:53:23 +01:00
semaphoreaphore mario = 0;
semaphore cliente = 0;
semaphore mutex = 1;
semaphore rosa = 0;
semaphore piero = 0;
int b = 0;
boolean attesaPiero = false;
process mario(){
<friggi>
b=30;
setTimer(60);
V(piero); // Serve a Piero per partire
while(true){
P(mario); // Si blocca in attesa che Rosa lo sblocchi per friggere
if(b>0) <Butta> // Se c'erano bomboloni scaduti, li butta
<Friggi bomboloni>
b=30;
setTimer(60);
if(attesaPiero){ // Se erano finiti i bomboloni dobbiamo sbloccare Piero con la V(piero)
attesaPiero = false;
V(piero);
}
V(rosa); // Sblocchiamo Rosa
}
}
process piero(){
P(piero); // Blocca Piero per la prima esecuzione. Viene sbloccato da Mario
while(true){
P(cliente); // Attende il cliente
P(mutex); // Per la mutua esclusione con Rosa
<Servi>
b--;
if(b==0){ // Quando finiscono i bomboloni..
attesaPiero = true;
setTimer(0); // ..sveglia Rosa
V(mutex);
P(piero); // e Piero si mette in attesa. Sarà svegliato da Mario
}
else{
V(mutex);
}
}
}
process rosa(){
while(true){
waitTimer(); // Bloccata sulla waitTimer(). All'inizio timer=+infinito. Settato a 60 da Mario
P(mutex); // Per la mutua esclusione con Piero
V(mario); // Sveglia Mario
P(rosa); // Si blocca in attesa che Mario frigga
V(mutex);
}
}