prac 6 ej 5

prac 6 ej 5

de Alexis Alfonso -
Número de respuestas: 4


Este ejercicio está marcado como básico pero no termino de dar una solución que me deje convencido.

La idea inicial que tuve fue plantear la task sumador con dos entry, una SUMA(s: int) que recibe un entero para ir sumando a

una variable "total" de la task, y una CANTIDAD(out m: int) que retorna en m la cantidad de numeros que voy sumando (otra variable de la task que llamé "cant").

La entry CANTIDAD me pareció necesaria para que los dos hilos de ejecución (task proc1 y task proc2) consulten ese valor dentro de un loop para saber si continuar realizando entry calls a SUMA o terminar su ejecución (cuando cant = 100).

Quisiera saber dos cosas, primero si esta idea es más o menos correcta y luego cómo lograr que los dos procesos no se queden chequeando infinitamente el valor de cant cuando el task sumador sale por el delay cuando pasan 10 segundos sin recibir solicitudes de SUMA.

Espero que se entienda y gracias.






En respuesta a Alexis Alfonso

Re: prac 6 ej 5

de Leonardo Alberro Zimmermann -

Hola,

no veo la necesidad de la entry CANTIDAD(out m: int). Podes pensarlo como que los procesos independientes siempre tienen "la intención" de sumar pero es el sumador el que decide dependiendo de las condiciones: cant=100 o nadie le pidó para sumar en el tiempo dado. Lo primero lo modelas con un acumulador y lo segundo con el delay de select. Espero haber aclarado.


Saludos,

Leonardo.

En respuesta a Leonardo Alberro Zimmermann

Re: prac 6 ej 5

de Alexis Alfonso -
"los procesos independientes siempre tienen la intención de sumar" significa que no interesa si los procesos se quedan infinitamente

en ese intento? eso no podría provocar busy waiting?

En respuesta a Alexis Alfonso

Re: prac 6 ej 5

de Leonardo Alberro Zimmermann -
El ejercicio pide que implementes la tarea Sumador. La palabra "siempre" ahí sin el resto de la respuesta hace ruido, pero la idea de la aclaración era que te abstraigas de los dos procesos que dan números para sumar y lo pienses desde la tarea Sumador. 

Pensándolo así, la cantidad de números que vas sumando pasa a ser una variable más, como el acumulador que mencionaste. 

Después, lo que mencionas como: " loop para saber si continuar realizando entry calls a SUMA o terminar su ejecución (cuando cant = 100)." es correcto y "cómo lograr que los dos procesos no se queden chequeando infinitamente el valor de cant cuando el task sumador sale por el delay cuando pasan 10 segundos sin recibir solicitudes": esto lo podes modelar levantando una bandera dentro del código del DELAY y  chequeandola en el loop.


Saludos.