semaphore mario = 0; semaphore cliente = 0; semaphore mutex = 1; semaphore rosa = 0; semaphore ricevi = 0; semaphore piero = 0; int b = 0; boolean attesaPiero = false; process mario(){ b=30; setTimer(60); V(piero); while(true){ P(mario); if(b>0) b=30; setTimer(60); if(attesaPiero){ attesaPiero = false; V(piero); } V(rosa); } } process piero(){ P(piero); while(true){ P(cliente); // Aspetta la richiesta del cliente P(mutex); V(ricevi); // Sblocca il cliente b--; if(b==0){ attesaPiero = true; setTimer(0); V(mutex); P(piero); } else{ V(mutex); } } } process rosa(){ while(true){ waitTimer(); P(mutex); V(mario); P(rosa); V(mutex); } } process cliente(){ V(cliente); // Richiede bombolone svegliando Piero P(ricevi); // Aspetta di ricevere il bombolone da Piero }