Práctico 6 - Ejercicio 7

Práctico 6 - Ejercicio 7

de Diego Esmir Gonzalez Morales -
Número de respuestas: 5

¿Estaría bien "DELAY 5*60*1000; leer_diario()" para indicar que el médico lee el diario por 5 minutos?

En ese contexto, lo hice así:

LOOP
SELECT


ACCEPT atenderNino() DO
atender_paciente();
END;


OR


WHEN atenderAdulto' COUNT > 0 DO
ACCEPT atenderAdulto() DO
atender_paciente();
END;
END;


OR


DELAY 5*60*1000;
leer_diario();
END;
END;

En respuesta a Diego Esmir Gonzalez Morales

Re: Práctico 6 - Ejercicio 7

de Usuario eliminado -

Hola, 

en el segundo accept yo haría "WHEN atenderAdulto' COUNT > 0 and  atenderNino' COUNT = 0  DO" 

porque sino estas ofreciendo el encuentro cuando hay niños y no respetas la prioridad, podría pasar tanto un adulto como un niño (el que primero solicite el encuentro).

En cuanto al DELAY entiendo que sirve para ofrecer el select por ese tiempo (luego de ese tiempo no oferece más los encuentros, si hay un loop vuelve a ofrecerlos). En este caso de leer diario consideré que la función "leer_diario()" ya lo hacía por 5 minutos.

Saludos, Mariana

 

En respuesta a Diego Esmir Gonzalez Morales

Re: Práctico 6 - Ejercicio 7

de Jorge Merlino -

Eso no está bien, la guarda del segundo accept debería ser

WHEN atenderNino'count = 0 =>

Por otro lado la idea es que leer_diario() demora 5 minutos por lo que deberías usar ELSE en lugar de OR DELAY. De la forma que lo hiciste el médico espera 5 minutos sin hacer nada y luego lee el diario.

En respuesta a Jorge Merlino

Re: Práctico 6 - Ejercicio 7

de Usuario eliminado -

pero el médico lee durante 5 minutos, eso esta dado en la función leer_diario()... no entiendo... 

En respuesta a Usuario eliminado

Re: Práctico 6 - Ejercicio 7

de Jorge Merlino -

La letra dice "Si no hay ninguno lee durante cinco minutos y vuelve a ver si hay alguien". Lo que implementó el compañero equivale a: si no hay ninguno espera 5 minutos a que llegue alguien y si luego de ese tiempo no llega nadie lee el diario por otros 5 minutos