Skip to content

Instantly share code, notes, and snippets.

@FEDE0D
Last active November 26, 2015 15:33
Show Gist options
  • Save FEDE0D/88637f7434aef24191fb to your computer and use it in GitHub Desktop.
Save FEDE0D/88637f7434aef24191fb to your computer and use it in GitHub Desktop.
Concurrente Parcial: Ejercicio 1 del parcial 2da Fecha 2013
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