Download presentation
Presentation is loading. Please wait.
Published byJuan Bennett Modified over 11 years ago
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
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.