Super Parcial Julio 2020 - Ej Monitores

Super Parcial Julio 2020 - Ej Monitores

de Nicolas Eduardo Navascues Soto -
Número de respuestas: 5

Buenas, leyendo la solución del ejercicio de monitores del super parcial me surgió la siguiente duda:

Suponiendo que llegan +20 estudiantes antes que ningún docente, entiendo que se bloquean todos en el wait de la condition 'estudiante_docente'. 
Una vez que llega el primer docente, despierta al primero de ellos con el signal de la condition 'estudiante_docente'. 
En ese momento, cada estudiante despierta al siguiente estudiante bloqueado con el signal de la misma condition, que tiene a continuación del wait en el que se encontraba bloqueado?
En ese caso, qué ocurre si en el medio llega un docente y quiere entrar? Cómo se le da esa prioridad para que pueda entrar en un caso como este?
Capaz que no me estoy dando cuenta de algo, pero espero que se entienda el planteo.

Gracias!
Saludos.


estudiante:


docente:

En respuesta a Nicolas Eduardo Navascues Soto

Re: Super Parcial Julio 2020 - Ej Monitores

de Jorge Merlino -

Una vez que llega el primer docente, despierta al primero de ellos con el signal de la condition 'estudiante_docente'. 
En ese momento, cada estudiante despierta al siguiente estudiante bloqueado con el signal de la misma condition, que tiene a continuación del wait en el que se encontraba bloqueado? 


En ese caso, qué ocurre si en el medio llega un docente y quiere entrar? Cómo se le da esa prioridad para que pueda entrar en un caso como este?

No podría entrar un docente en el medio dado que estas haciendo signal a procesos que ya están adentro del monitor y se van a despertar primero que el docente que no entró al monitor todavía. Como siempre, para darle prioridad a un proceso tenés que saber que existe y hasta que el docente no entre al monitor y avise que está esperando no se le puede dar prioridad.

En respuesta a Jorge Merlino

Re: Super Parcial Julio 2020 - Ej Monitores

de Nicolas Eduardo Navascues Soto -
Buenas!
Retomando esta pregunta después de un tiempo, me queda la duda de si la solución planteada contempla la restricción "en caso de tener personas esperando fuera tendrán prioridad para el ingreso a la sala los docentes", ya que por lo que entiendo de la respuesta de Jorge esto no sería así.

Si como máximo pueden ingresar 20 personas a la sala, por lo que entiendo los estudiantes que están "haciendo fila" para ingresar no deberían contar como que están dentro de la sala. Por lo tanto, si llega un profesor en el medio, habría que dejarlo entrar, lo cual no ocurre en esta solución si por ejemplo, tomando el caso inicial de una sala vacía, llegan 19 estudiantes a la fila antes de que llegue el primer profesor (llegan a la fila porque no entran hasta que haya un profesor); una vez que llegue el profesor procederán a ingresar los 19 estudiantes (respetando el límite de 20 personas en simultáneo en la sala) y no se atenderán pedidos de ingreso de otros profesores hasta que estos 19 alumnos hayan pasado. 

Es correcto esto?  
En respuesta a Nicolas Eduardo Navascues Soto

Re: Super Parcial Julio 2020 - Ej Monitores

de Jorge Merlino -
Hola,

Es lo mismo que respondí la otra vez, por la forma en que funcionan los monitores los procesos que están esperando en un condition van a despertarse primero que los que están esperando afuera. A causa de eso si llega un docente luego de que están entrando los estudiantes no tiene forma de avisar que llegó hasta que los estudiantes terminen de entrar. Como dije antes también para dar prioridad a un proceso tenés que saber que existe pero si nunca logra entrar al monitor no hay forma de saber que está ahí. El estado del monitor es exactamente el mismo si está esperando el docente o no.
Hay otras primitivas como ada que permiten saber si hay un proceso esperando en un entry pero para los monitores esto no existe por lo que para ese caso particular que mencionás no se puede hacer que el docente pase primero. La idea de la letra es que si tenés docentes y estudiantes esperando en un condition que pasen primero los docentes (o sea que no se puede usar el mismo condition para los dos). No se espera que se cumpla para esos casos en que el docente está esperando afuera del monitor donde la cola obligatoriamente es una sola por como funciona el monitor.
En respuesta a Jorge Merlino

Re: Super Parcial Julio 2020 - Ej Monitores

de Nicolas Eduardo Navascues Soto -
Perfecto, muchas gracias por la respuesta Jorge.
"No se espera que se cumpla para esos casos en que el docente está esperando afuera del monitor donde la cola obligatoriamente es una sola por como funciona el monitor." era justamente lo que no me había quedado del todo claro.

Saludos!