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