Problema del Jardín Ornamental
Enviado por KronnoJean • 2 de Diciembre de 2022 • Trabajo • 274 Palabras (2 Páginas) • 53 Visitas
[pic 1][pic 2]
Problema del Jardín Ornamental:[pic 3]
Tenemos un bonito jardín que está abierto al público que debe paga una entrada para disfrutar de él. La entrada es controlada por dos tornos, los gerentes del jardín desean que en cada momento puedan saber cuántas
personas hay dentro.
Queremos hacer una sencilla simulación de su funcionamiento:
- Cada Torno será manejado por un proceso separado en el programa.
- Los procesos de los tornos se ejecutarán concurrentemente.
- Usamos una variable global para contar el número actual de visitantes.
- Simulamos que entran 20 por cada torno y mostramos el resultado.
- Sin exclusión mutua.
program EjercicioJardin;
process type Puerta(var tot:integer);
var i:integer;
begin
for i:=1 to 20 do
tot:=tot+1;
end;
begin
end.
var P1,P2:Puerta;
total:integer; total:=0;
cobegin
p1(total);p2(total); coend; write('Total:',total);
[pic 4][pic 5]
[pic 6]
- Con exclusión mutua.
program EjercicioJardinDekker;
type
tControl=record
control1,control2: boolean; turno:integer;
var
end;
total:integer; Con:tControl;
process Puerta1 (var p: tControl; var tot:integer);
var i:integer;
begin
for i:=1 to 20 do begin
p.control1:=true;
while p.control2 do
if p.turno <> 1 then begin
end; tot:=tot+1;
p.control1:=false; while p.turno <> 1 do; p.control1:=true;
end;
end;
wpr.ictoen(tr'oPl11:='fa)l;se; p.turno:=2;
process Puerta2 (var p: tControl; var tot:integer);
var i:integer;
begin
for i:=1 to 20 do begin
p.control2:=true;
while p.control1 do
if p.turno <> 2 then begin
end; tot:=tot+1;
p.control2:=false; while p.turno <> 2 do; p.control2:=true;
end; begin
end;
total:=0;
write('P2 '); p.control2:=false; p.turno:=1;
end.
Con.control1:=false; Con.control2:=false; Con.turno:=1; cobegin
Puerta1(Con,total); Puerta2(Con,total);
coend;
write('Total:',total);
[pic 7][pic 8]
...