Presentation is loading. Please wait.

Presentation is loading. Please wait.

Il Barbiere Addormentato (versione con Monitor) type salone = monitor var poltronaoccupata, barbieredorme : boolean slibere :integer sedia, taglia, sveglia:

Similar presentations


Presentation on theme: "Il Barbiere Addormentato (versione con Monitor) type salone = monitor var poltronaoccupata, barbieredorme : boolean slibere :integer sedia, taglia, sveglia:"— Presentation transcript:

1 Il Barbiere Addormentato (versione con Monitor) type salone = monitor var poltronaoccupata, barbieredorme : boolean slibere :integer sedia, taglia, sveglia: condition procedure entry Avanti-il-prossimo begin if poltronaoccupata then begin if slibere < max then begin slibere := slibere + 1 sedia.signal end else begin barbieredorme := true sveglia.wait barbieredorme := false end

2 Procedure entry Si-Accomodi begin poltronaoccupata := false taglia.signal end Procedure entry Vado-dal-Barbiere (var done: boolean) begin done := true if (poltronaoccupata.OR. slibere < max ) then if slibere = 0 then done := false else begin slibere := slibere - 1 sedia.wait end if done then begin poltronaoccupata := true if barbieredorme then sveglia.signal taglio.wait end begin pltronaoccupata:= false barbieredorme := false slibere := max end

3 Process Barbiere repeat begin Avanti-il-prossimo Si-Accomodi end forever Process Cliente var done: boolean begin : Vado-dal-Barbiere (done) if done then : end

4 Il Barbiere Addormentato (versione con RCC) var salone: shared record clienti : 0..max (0) tagliofinito : boolean (false) Process Barbiere repeat region salone when ( clienti > 0) do begin clienti := clienti - 1 end region salone begin tagliofinito := true end forever

5 Process Cliente var done: boolean begin : region salone do begin if clienti < max then begin clienti := clienti + 1 done := true end else done := false end if done then region salone when tagliofinito do begin tagliofinito := false end : end

6 Il Barbiere Addormentato (versione con RPC) Process salone var poltronalibera : boolean slibere :integer attesa:queue of process begin slibere : = N poltronalibera:=true do (poltronalibera.and. slibere < N); accept Avanti-il-prossimo (out client : process) do …..od accept Vado-dal-barbiere (in client: process, out done: boolean) do …..od accept Ho-finito (in client) do …..od od end

7 accept Vado-dal-barbiere (in: client: process, out: done: boolean) do if slibere = 0 thendone := false else begin slibere := slibere - 1 insert (client, attesa) done := true end od accept Avanti-il-prossimo (out client : process) do begin slibere := slibere+ 1 client:= first (attesa) poltronalibera:= false end od accept Ho-finito (in client) do begin client.Si-accomodi poltronalibera:= true end

8 Process Barbiere var cliente: process begin : repeat begin salone. Avanti-il-prossimo (var cliente) salone. Ho-finito (cliente) end forever Process Cliente var done: boolean begin : salone. Vado-dal-barbiere (myname, done) if done then else accept Si-Accomodi do od end


Download ppt "Il Barbiere Addormentato (versione con Monitor) type salone = monitor var poltronaoccupata, barbieredorme : boolean slibere :integer sedia, taglia, sveglia:"

Similar presentations


Ads by Google