Anda di halaman 1dari 2

Enunciado problema de semáforos

En un cañón existe un paso navegable que comparten caníbales y misioneros. El paso


dispone de un embarcadero de madera que no soporta el peso de más de 10 personas y
un bote para atravesar el paso sobre el río.
El bote, con una capacidad máxima de 4 personas, lo gobierna un capitán que intenta
hacer el mínimo número de viajes, por lo que sólo parte cuando el bote está lleno. Para
garantizar la seguridad de los pasajeros (caníbales o misioneros) durante la travesía, no se
permite que viaje 1 misionero con 3 caníbales o 1 caníbal con tres misioneros (3 caníbales
pueden comer a un misionero y tres misioneros pueden convertir a un caníbal). Cualquier
otra combinación se considera segura.
Los pasajeros (caníbales o misioneros) llegan al paso y entran en el embarcadero siem-
pre que haya sitio suficiente, si no esperan en las montañas. El capitán descansa en su
camarote cuando no tiene trabajo. Cuando se pueda completar un bote de forma segura
empieza la travesía.
Cuando el bote llega al otro lado del paso, el capitán pide a uno de los pasajeros
(caníbal o misionero) que desembarque y le ayude a amarrar los dos cabos del barco (uno
lo amarra el capitán y el otro el pasajero). Cuando tanto el capitán como el pasajero
hayan amarrado su cabo correspondiente, la travesía ha finalizado y el resto de pasajeros
puede desembarcar
Dado que el comportamiento de los caníbales y de los pasajeros es idéntico, se utili-
zará un único tipo de proceso pasajero que acepte un parámetro de entrada indicando
si el pasajero es un caníbal o un misionero: pasajero tipo, donde tipo será el carácter c
para caníbal o m para misionero. En la solución se debe proporcionar el código de los dos
tipos de procesos involucrados capitan y pasajero; así como el código de los procesos
encargados de crear y destruir los semáforos necesarios para la sincronización: inic_paso
y fin_paso. Los procesos podrán utilizar un fichero “paso.txt” para almacenar la infor-
mación mínima necesaria para la resolución del problema.
En el problema planteado se obviará el sentido en la travesía del bote y de los pasajeros,
o lo que es lo mismo se supone que existe un bote y un capitán diferente para cada sentido
de la travesía. Además, en la resolución de la práctica se supondrá la existencia de un
único proceso capitán y un número no determinado de procesos pasajero de tipo caníbal
o de tipo misionero. Cada proceso se ejecutará en una ventana diferente.
A continuación, se muestran algunos ejemplo de ejecución de los proceso capitán y
pasajero indicando los mensajes que se deben mostrar en pantalla.
> capitan
Descansando en el camarote .....
Empieza la travesía (2 misioneros y 2 caníbales) (pulsa ENTER para finalizar)
<se pulsa ENTER>
Amarrando uno de los cabos (pulsa ENTER para finalizar)
Acabamos de amarrar ....
Vuelta al embarcadero (1 para finalizar y 2 para seguir trabajando)
<se pulsa 2>
Descansando en el camarote .....
-------------------------------------
> pasajero c
Caníbal esperando en las montañas ...
Esperando en el embarcadero ....
Iniciando la travesía ....
Fin de la travesía
-------------------------------------

> pasajero m
Misionero esperando en las montañas ...
Esperando en el embarcadero ....
Iniciando la travesía ...
Ayudo a amarrar un cabo del bote (pulsa ENTER para finalizar)
<Se pulsa ENTER>
Acabamos de amarrar......
Fin de la travesía

Anda mungkin juga menyukai