Buenas, quería saber si mi solución contemplaba todos los puntos que pide el ejercicio.
- Pueden haber varios vehículos en el puente.
- Los barcos tendrán prioridad para el cruce (Semáforo cruce_auto), debiendo poder hacer el cruce tan pronto como se haya vaciado de vehículos y elevado el puente.
- Solamente se admitirá el cruce de un único barco a la vez (Semáforo cruce_barco).
- En caso de presentarse cola de barcos, se desea evitar que el puente se eleve y descienda para cada uno de ellos (puente_elevado).
Dejo mi solución:
procedure auto { procedure barco {
begin begin
P(cruce_auto); P(S2);
P(S1); cant_barcos ++;
cant_autos ++; V(S2);
V(S1); if(cant_autos == 0) then {
Cruce auto; P(cruce_barco);
P(S1); if(not puente_elevado) then {
cant_autos --; elevar_puente(true);
V(S1); puente_elevado:= true;
V(cruce_auto); }
end Cruce barco;
} P(S2);
cant_barcos --;
if(cant_barcos == 0) then {
if(puente_elevado) {
elevar_puente(false);
puente_elevado:= false;
V(cruce_auto);
}
}
V(S2);
V(cruce_barco);
}
end
}
begin
init(S1,1);
init(S2,1);
init(cruce_auto,1);
init(cruce_barco,1);
int cant_autos = 0;
int cant_barcos = 0;
COBEGIN
auto;
...
auto;
barco;
...
barco;
COEND
end
Gracias, saludos.