semaphoreaphore mario = 0; semaphore cliente = 0; semaphore mutex = 1; semaphore rosa = 0; semaphore piero = 0; int b = 0; boolean attesaPiero = false; process mario(){ 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) // Se c'erano bomboloni scaduti, li butta 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 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); } }