31-05-2012, 12:52
hola a todos. tengo una consulta por un ejercicio de sincronizacion que la verdad no lo puedo terminar de plantear.
ahi va :
Se tiene un programa para simular la ejecución de penales de un partido de fútbol, el cual
consta de tres procesos: árbitro, jugador y arquero. El pseudo-código es el siguiente:
Las reglas que se deben cumplir son las siguientes:
• Existen cinco procesos jugadores, un proceso árbitro y un proceso arquero.
• Los jugadores no pueden patear si el árbitro no lo indicó.
• El arquero no puede atajar si el jugador no pateó.
• El árbitro solo puede dar la orden cuando el jugador y el arquero están posicionados.
• Existe una variable global GOL, la cual es modificada por la función validar_tiro(),que
indica si el último penal pateado fue gol o no.
• Una vez que se valide el penal, se le pasará el turno al próximo jugador.
• Los jugadores siempre patean en un orden definido (ej: jug1, jug2, ..., jug5, jug1, jug2,
etc).
• Existe a disposición la función actual() que retorna el id del pateador actual, y la función
siguiente() que retorna el id del próximo pateador.
Provea una solución que sincronice los tres procesos usando solamente semáforos,
asegurándose que se cumplan las reglas establecidas sin producirse deadlock ni starvation. Se
deberá inicializar cada semáforo, indicando también su tipo.
saludos
ahi va :
Se tiene un programa para simular la ejecución de penales de un partido de fútbol, el cual
consta de tres procesos: árbitro, jugador y arquero. El pseudo-código es el siguiente:
//proceso arbitro :
while ( TRUE ) {
dar_orden () ;
validar_tiro () ;
}
//proceso jugador :
while ( TRUE ) {
posicionarse();
patear ();
if ( GOL == TRUE ) {
festejar();
} else {
lamentarse ();
}
}
//proceso arquero :
while ( TRUE ) {
posicionarse ();
atajar();
if ( GOL == FALSE ) {
festejar ();
} else {
lamentarse ();
}
}
Las reglas que se deben cumplir son las siguientes:
• Existen cinco procesos jugadores, un proceso árbitro y un proceso arquero.
• Los jugadores no pueden patear si el árbitro no lo indicó.
• El arquero no puede atajar si el jugador no pateó.
• El árbitro solo puede dar la orden cuando el jugador y el arquero están posicionados.
• Existe una variable global GOL, la cual es modificada por la función validar_tiro(),que
indica si el último penal pateado fue gol o no.
• Una vez que se valide el penal, se le pasará el turno al próximo jugador.
• Los jugadores siempre patean en un orden definido (ej: jug1, jug2, ..., jug5, jug1, jug2,
etc).
• Existe a disposición la función actual() que retorna el id del pateador actual, y la función
siguiente() que retorna el id del próximo pateador.
Provea una solución que sincronice los tres procesos usando solamente semáforos,
asegurándose que se cumplan las reglas establecidas sin producirse deadlock ni starvation. Se
deberá inicializar cada semáforo, indicando también su tipo.
saludos