-
-
Save FEDE0D/88637f7434aef24191fb to your computer and use it in GitHub Desktop.
Concurrente Parcial: Ejercicio 1 del parcial 2da Fecha 2013
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Parcial concurrente 2da fecha 2013 | |
1) Resolver con MONITORES el siguiente problema. | |
En un Crucero por el Mediterráneo hay 200 personas que deben subir al barco por medio de 10 lanchas con 20 lugares | |
cada una. Cada persona sube a la lancha que le corresponde. Cuando en una lancha han subido sus 20 personas durante 5 minutos navega hasta el barco. Recién cuando han llegado las 10 lanchas al barco se les permite a las 200 personas subir al barco. | |
NOTA: suponga que cada persona llama a la función int NúmeroDeLancha() que le devuelve un valor entre 0 y 9 indicando la lancha a la que debe subir. Maximizar la | |
concurrencia. | |
process Persona[p: 1..200] { | |
int nroLancha = NumeroLancha(); | |
M_Lancha[nroLancha].abordar(); | |
// sube al barco | |
} | |
Monitor M_Lancha[m: 0..9] { | |
int cantidad = 0; | |
Cond c_desembarco; | |
procedure abordar(){ | |
cantidad++; | |
if (cantidad == 20){ | |
delay(5); // viaje de 5 minutos hasta el barco | |
M_Barco.esperarDesembarco(); | |
signal_all(c_desembarco); | |
}else{ | |
wait(c_desembarco); | |
} | |
} | |
} | |
Monitor M_Barco { | |
int cantidad = 0; | |
Cond c_desembarco; | |
procedure esperarDesembarco(){ | |
cantidad++; | |
if (cantidad < 10){ | |
wait(c_desembarco); | |
}else{ | |
signal_all(c_desembarco); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment