Barbiere dormiglione


Mux.acquire(); ClientiInAttesa ++; while



Scaricare 87.96 Kb.
Pagina7/8
22.12.2019
Dimensione del file87.96 Kb.
1   2   3   4   5   6   7   8
Mux.acquire();

ClientiInAttesa ++;



while (BarbiereAttivo)AttesaTurno.wait(Mux);

ClientiInAttesa --; BarbiereAttivo= true;



AttesaBarbiere.signal(Mux);

// ha effetto solo se e il barbiere è in attesa e lo risveglia //

Mux.release();



// un cliente e’ pronto ad occupare la poltrona: si tratta di quello appena entrato in negozio, o di quello//

// riattivato dal barbiere //

;

Mux.acquire();

while (BarbiereAttivo) TaglioCapelli.wait(Mux);

// attende il taglio dei capelli rilasciando la mutua esclusione, che riacquista dopo la riattivazione //


Mux.release();

// Fine del frammento di codice //

}


Fast Food

Un ristorante Fast-Food che somministra un unico tipo di hamburger è gestito da un addetto e da un cuoco, che interagiscono attraverso uno scaffale, dove possono essere accumulati fino a 10 hamburger pronti per essere serviti. II cuoco prepara gli hamburger in sequenza e li depone sullo scaffale, eventualmente attendendo che ci sia un posto disponibile. Il generico cliente fa il suo ordine all'addetto e quindi attende la consegna dell’hamburger. L'addetto riceve in sequenza gli ordini, preleva gli hamburger dallo scaffale (eventualmente attendendo la disponibilità) e li consegna ai clienti, riattivandoli.

Il ristorante è un processo, i cui thread sono i clienti, l'addetto e il cuoco. Lo scaffale è un buffer di 10 celle, ciascuna capace di contenere un hamburger.

Per l’interazione tra i thread si utilizzano le variabili condizione e le lock, operando sulle lock MutexOrdini e MutexScaffale tutte inizializzate al valore 1, e sulle variabili condizione AttesaOrdine, consegna, HamburgerNelloScaffale e PostoLiberoNelloScaffale , tutte inizializzate con coda vuota.

Si utilizzano inoltre le variabili intere (condivise) OrdiniPendenti e HamburgerPronti, con valore iniziale 0.

Il generico cliente esegue la seguente funzione:





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


©astratto.info 2019
invia messaggio

    Pagina principale