55 lines
1.4 KiB
Java
55 lines
1.4 KiB
Java
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);
|
|
}
|
|
}
|