Barbiere dormiglione



Scaricare 87.96 Kb.
Pagina3/8
22.12.2019
Dimensione del file87.96 Kb.
1   2   3   4   5   6   7   8
SOLUZIONE con semafori

Barbiere

{

BarbiereAddormentato= true;



AttesaBarbiere.P()

// la riga precedente inizializza il negozio ed è eseguita prima della generazione dei thread “cliente” //

while(true) {

taglioCapelli.V()

mutex.P()

if ClientiInAttesa> 0 {



// riattiva un cliente in attesa del turno e libera la poltrona //

ClientiInAttesa – -; dorme= false;

AttesaTurno.V()

}

else { BarbiereAddormentato= true; dorme= true; }



// occupa la poltrona per dormire, sospendendosi //

mutex.V()

if dorme= true

AttesaBarbiere.P(); // la sospensione avviene dopo il rilascio della mutua esclusione //

}

}
Cliente //Frammento di codice//



{

< entra nel negozio >

mutex.P();

if BarbiereAddormentato== true {

BarbiereAddormentato= false; attende= false;

AttesaBarbiere.V()

// sveglia il barbiere che libera la poltrona //

}

else {



// il barbiere è sveglio e sta servendo un cliente //

ClientiInAttesa ++; attende= true;

}

mutex.V();



if attende == true

AttesaTurno.P()

// la sospensione avviene dopo il rilascio della mutua esclusione //

// Il cliente attende il suo turno. Sarà riattivato dal barbiere e troverà la poltrona libera //

TaglioCapelli.P()



// siede sulla poltrona e attende il taglio dei capelli. Al termine…//


// Fine del frammento di codice //

}



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


©astratto.info 2019
invia messaggio

    Pagina principale