Parcial 2018 - Ejercicio 3, Monitores

Parcial 2018 - Ejercicio 3, Monitores

de Rodrigo Sebastian Gallardo Negrín -
Número de respuestas: 5

Buenas,

Queria consultar si la solucion planteada para el ejercicio 3 (la parte de monitores) es correcta ya que creo que se le da prioridad a la maquina generadora de liquido antes que a la empaquetadora, cuando en la letra no se menciona ninguna prioridad entre ambas maquinas. Puede que no este comprendiendo el funcionamiento de la solucion.

Adjunto el parcial con su solucion.

Muchas gracias.

En respuesta a Rodrigo Sebastian Gallardo Negrín

Re: Parcial 2018 - Ejercicio 3, Monitores

de Jorge Merlino -

Si la letra no especifica nada no está mal darle prioridad a alguien. Solo estaría mal si la letra indica específicamente que no pueden tener prioridad.

En este caso si se quisiera ser justo se tendría que sortear a cual despertar primero o tener un estado variable donde se ejecute el if else con un orden a veces y al revés en otro caso. En cualquier caso es un tema de programación que no agrega complejidad a la parte de concurrencia. Tampoco hay posposición indefinida porque el tamaño del tanque es finito.

En respuesta a Jorge Merlino

Re: Parcial 2018 - Ejercicio 3, Monitores

de Tomas Facal Lucian -

Duda sobre el mismo ejercicio (startDescargar,endDescargar): Que pasa en el caso de que cantBebida==99 y este libre el tanque. Llega una generadora como esta libre, pone la bandera libre=false. Y luego llega otra maquina generadora. Esta se bloquea en esperaProd.wait(). Luego la primera descarga, completa el tanque y hace endDescargar(). Como hay otra generador bloqueada se le hace un .signal sin preguntar por cantBebida, esto hace que la segunda generadora desborde el tanque al descargar. La solucion presenta este problema, o le estamos errando en algo??? Gracias!!!

En respuesta a Tomas Facal Lucian

Re: Parcial 2018 - Ejercicio 3, Monitores

de Jorge Merlino -

Si, está mal la solución, falta ese chequeo. Está hecho en endLlenar pero falta el chequeo simétrico en endDescargar.

En respuesta a Jorge Merlino

Re: Parcial 2018 - Ejercicio 3, Monitores

de Tomas Facal Lucian -

Entiendo, pero en endLlenar esta solo el control de cantBebida>0 tambien deberia estar el caso de cantBebida <100 cuando se hace el signal de la productora. Y todo anologo para endDescargar no? Gracias por la respuesta

En respuesta a Tomas Facal Lucian

Re: Parcial 2018 - Ejercicio 3, Monitores

de Jorge Merlino -

No se precisa el control de cantBebida < 100 en endLlenar porque acabás de sacar bebida del tanque por lo que no puede estar lleno. Lo mismo al cargar el tanque solo hay que verificar que no esté lleno porque no puede suceder que esté vacío.