Barbiere dormiglione



Scaricare 87.96 Kb.
Pagina1/8
22.12.2019
Dimensione del file87.96 Kb.
  1   2   3   4   5   6   7   8

Barbiere dormiglione

Nel problema del “barbiere dormiglione” si considera un negozio gestito da un unico barbiere, con una poltrona per il servizio dei clienti e un numero illimitato di sedie per l’attesa. Il barbiere e i clienti sono thread e la poltrona è una risorsa, che può essere assegnata a un cliente per il taglio dei capelli, oppure utilizzata dal barbiere per dormire. All’apertura del negozio e quando non ci sono clienti in attesa di servizio, il barbiere occupa la poltrona per dormire, fino all’arrivo del primo cliente.

Quando entra nel negozio, il generico cliente ha il seguente comportamento:


  • se il barbiere è addormentato, lo risveglia provocando il rilascio della poltrona, che occupa immediatamente;

  • altrimenti (ciò avviene quando il barbiere è attivo per eseguire il taglio dei capelli ad un altro cliente) si blocca, accomodandosi su una delle sedie in attesa del suo turno;

  • quando arriva il suo turno, è riattivato dal barbiere ed occupa la poltrona;

  • dopo il taglio dei capelli, paga ed esce dal negozio.

Dopo che un cliente ha occupato la poltrona, il barbiere esegue il taglio dei capelli e al termine:

  • se ci sono clienti in attesa del proprio turno, riattiva il primo;

  • altrimenti occupa la poltrona e si addormenta.

Il problema viene risolto utilizzando i seguenti dati condivisi:

  • BarbiereAddormentato: booleano;

  • ClientiInAttesa: intero; valore iniziale 0;

e i seguenti semafori:

  • mutex: valore iniziale 1 (per la mutua esclusione);

  • AttesaBarbiere: valore iniziale 0 (utilizzato dal barbiere per addormentarsi sulla poltrona. L’attesa su questo semaforo implica l’assegnazione della poltrona al barbiere);

  • AttesaTurno: valore iniziale 0 (per i clienti che attendono il taglio. Le modalità di utilizzo garantiscono che il valore di questo semaforo sia sempre 0)

  • TaglioCapelli: valore iniziale 0 (il cliente si sospende su questo semaforo all’inizio del taglio dei capelli e viene riattivato dal barbiere alla fine. L’attesa su questo semaforo implica l’assegnazione della poltrona al cliente).

Per ogni cliente è inoltre definita la variabile privata attende utilizzata per evitare la sospensione all’interno della sezione critica nella quale viene decisa la sospensione. Allo stesso fine il barbiere utilizza la variabile privata dorme.

Notare che la risorsa poltrona non viene gestita esplicitamente, perché le assegnazioni e i rilasci sono implicite nelle operazioni sui semafori AttesaBarbiere e TaglioCapelli.





Condividi con i tuoi amici:
  1   2   3   4   5   6   7   8


©astratto.info 2019
invia messaggio

    Pagina principale