Hola, se me ocurrio esta solución para este ejercicio y quisiera saber si tiene errores. Gracias
Program ejercicio_7
var cont_autos: integer
var cont_barcos: integer
var puente_inactivo: bool
var mutex_auto: semaforo
var mutex_barco: semaforo
var puente_vacio: semaforo
var bloqueo_barcos: semaforo
var bloqueo_autos: semaforo
var auto_entrada: semaforo
var auto_salida: semaforo
var barco_entrada: semaforo
var barco_salida: semaforo
Procedure auto
begin
loop
P(mutex_auto)
cont_autos:=cont_autos+1;
if cont_barcos <> 0 then P(bloqueo_autos) end if
V(mutex_auto)
if puente_inactivo then V(puente_vacio) end if
P(auto_entrada)
delay(X)
V(auto_salida)
anda_por_ahi()
end loop
end
Procedure barco
begin
loop
P(mutex_barco)
cont_barcos:=cont_barcos+1;
if cont_barcos = 1 then P(bloqueo_barcos);
V(mutex_barco)
if puente_inactivo then V(puente_vacio) end if
P(barco_entrada)
delay(X)
V(barco_salida)
navega_por_ahi()
end loop
end
Procedure puente
var puente_bajo: bool
begin
puente_bajo:=true
loop
if puente_inactivo then
P(puente_vacio)
puente_inactivo:=false
end if
if puente_bajo then
if cont_barcos <> 0 and cont_autos = 0 then
puente_bajo:=false
levantar_puente()
V(bloqueo_barcos)
else
P(auto_salida)
P(mutex_auto)
cont_autos:=cont_autos-1;
V(mutex_auto)
V(auto_entrada)
end if
else
P(barco_salida)
P(mutex_barco)
cont_barcos:=cont_barcos-1;
if cont_barcos = 0 then
puente_bajo:=true
bajar_puente()
V(bloqueo_autos)
end if
V(mutex_barco)
V(barco_entrada)
end if
if cont_autos=0 and cont_barcos=0 then puente_inactivo=true end if
end loop
end
begin
cont_autos:=0;
cont_barcos:=0;
puente_inactivo=true;
init(mutex_auto, 1)
init(mutex_barco, 1)
init(puente_vacio, 0)
init(bloqueo_barcos, 0)
init(bloqueo_autos, 0)
init(auto_entrada, MAX_AUTOS_PUENTE)
init(auto_salida, 0)
init(barco_entrada, 1)
init(barco_salida, 0)
cobegin
puente;
auto; ...
barco; ...
coend
end