Il barbiere che dorme Specifica del problema Illustrazione del

Transcript

Il barbiere che dorme Specifica del problema Illustrazione del
Specifica del problema
Un negozio di barbiere con
Il barbiere che dorme
Se non vi sono clienti nel negozio il barbiere dorme
sulla poltrona
Il primo cliente che entra nel negozio vuoto sveglia il
barbiere
I clienti che entrano trovando la poltrona occupata si
mettono in attesa su una sedia
Il cliente che non trova una sedia libera va a cercare
un altro barbiere senza attendere
Un esercizio sulla sincronizzazione
dei processi
Sincronizzazione tra processi
Sistemi Operativi - Tullio Vardanega
1/7
Illustrazione del problema
1
2
3
4
1 barbiere
1 poltrona per il cliente servito
N sedie per clienti in attesa
Sincronizzazione tra processi
Sistemi Operativi - Tullio Vardanega
2/7
Uno schema di soluzione – 1
Processo “barbiere”
5
Ripeti
{ Attendi cliente
Servi cliente }
Contatore protetto di clienti in attesa
Processo “cliente”
Entra nel negozio
Richiedi servizio
Se possibile, attendi
Ottieni servizio
Altrimenti cerca un altro barbiere
Sincronizzazione tra processi
Sistemi Operativi - Tullio Vardanega
3/7
Sincronizzazione tra processi
Sistemi Operativi - Tullio Vardanega
4/7
1
Uno schema di soluzione – 2
Uno schema di soluzione – 3
protected body Semaforo is
entry P when CiSonoClienti is
begin
InCoda := InCoda - 1;
CiSonoClienti := InCoda > 0;
end P;
procedure V (Esito : out Boolean) is
begin
InCoda := InCoda + 1;
CiSonoClienti := InCoda > 0;
Esito := True;
exception
-- when one customer too many tries to enter the shop to try
--+ to take a seat an exception is raised to disallow him
when Constraint_Error =>
Esito := False;
end V;
end Semaforo;
Processo Barbiere
Sincronizzazione tra processi
Sistemi Operativi - Tullio Vardanega
loop
Semaforo.P;
// servi il cliente
Servito.V; // semaforo tradizionale
end loop;
Processo Cliente
loop
Semaforo.V (Esito);
if Esito then
// attendi il servizio
Servito.P;
end if:
end loop;
5/7
Sincronizzazione tra processi
Sistemi Operativi - Tullio Vardanega
6/7
Due eseguibili di prova
Un cliente in arrivo ogni 5 secondi
Tempo di servizio variabile tra 1 e 16
secondi
Versione 1
Per MS Windows (✬)
Versione 2
Per ambiente Java
Sincronizzazione tra processi
Sistemi Operativi - Tullio Vardanega
7/7
2