Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Taller Procesos Concurrentes
Integrantes: Cristian Narvaez, Isabella Peña
El problema del canotaje
Una empresa turística ofrece el servicio de canotaje. Para ello, las personas deben abordar
un bote inflable con capacidad para M pasajeros, que es manejado por un guía experto y
que los llevará desde un punto río arriba hasta un punto más abajo. Desarrolle un algoritmo
que permita sincronizar los recorridos en canotaje que realizan N>=M personas en un día,
teniendo en cuenta que:
● Cada pasajero realiza el recorrido sólo una vez.
● El bote debe estar lleno antes de salir del punto de partida, a excepción del último
bote del día(situación que se presenta cuando N no es múltiplo de M).
● Cuando un guía termina un recorrido, debe llevar su bote hasta el punto de partida.
Sólo en ese momento se puede iniciar el embarque de otro grupo de personas. Su
trabajo termina cuando han viajado todas las personas.
Solución
mutex = semaphore(1) //semáforo para los pasajeros que abordan
mutex2 = semaphore(1) / /semáforo para los pasajeros que se bajan
embarcados = 0 //los pasajeros que suben, es decir M
desembarcados = 0 / /los pasajeros que bajan
colaEmbarque = semaphore(0) / /lista de espera para abordar
colaDesembarque = semaphore(0) / /lista de espera para bajar
todosABordo = semaphore(0) //indica que el bote está lleno
todosEnTierra = semaphore(0) / /indica que el bote está vacío
//SOLUCIÓN PARA EL GUÍA
faltan = N
finalizado = falso
guia(){
mientras(!finalizado){
embarcar();
up(&colaEmbarque);
down(&todosABordo);
recorrido();
desembarcar();
up(&colaDesembarque);
down(&todosEnTierra);
}
}
//SOLUCIÓN PARA EL PASAJERO
pasajero(){
down(&colaEmbarque);
abordar();
down(&mutex);
embarcados+=1;
si(embarcados==M){
up(&todosABordo);
embarcados=0;
}
up(&mutex);
down(&colaDesembarque);
bajar();
down(&mutex2);
desembarcados+=1;
si(desembarcados==M){
up(&todosEnTierra);
desembarcados=0;
}
up(&mutex2);
}