Super Parcial 2021 Bloque 4

Super Parcial 2021 Bloque 4

de Rodrigo Alain De La Vega Rodriguez -
Número de respuestas: 1

Buenas! La letra de esta parcial esta en el siguiente link: https://eva.fing.edu.uy/pluginfile.php/77323/mod_folder/content/0/2021/202107_superparcial_solucion.pdf?forcedownload=1

Cuando termina el supervisor hace lo siguiente:

La duda es:
El foreach se podría sacar y dejar el procedimiento de la siguiente manera?

procedure terminaSupervisor(){
      haySupervisor = false;
      esperandoFinSupervisor.signal(); //DESPIERTO SOLO 1 DE LOS 6
      cantidadEsperandoSupervisor--;
}

y luego para cada casilla en el procedimiento casillaLibre al final del todo hacer:
if cantidadEsperandoSupervisor > 0 then
begin
           esperandoFinSupervisor.signal(); //DESPIERTO A OTRO DE LOS QUE ESTE TRANCADO POR EL SUPERVISOR
           cantidadEsperandoSupervisor--;
end;

Lo que pretendo con esto es no usar un for y que cada casilla despierte a otra luego de que la primera se desperto porque seguro termino de trabajar el supervisor.

No se si me explique correctamente. Si no se entiende me avisan y vuelvo a preguntar.

Saludos,

En respuesta a Rodrigo Alain De La Vega Rodriguez

Re: Super Parcial 2021 Bloque 4

de Manuel Freire -
Hola,

Lo más natural sería poner esas dos instrucciones adentro del if inmediatamente después de que se hace esperandoFinSupervisor.wait(). MIrando este ejemplo particular me parece que también funciona como decís vos pero como norma general despertar en cascada en estos casos siempre sirve

Saludos!