Examen Febrero 2020 - Problema 2

Examen Febrero 2020 - Problema 2

de Martin Aram Ghazarian Agemian -
Número de respuestas: 2

La solución del examen no me queda claro para nada que priorice a los TH, sólo que al llegar el primer TH con el p(try) se queda esperando a los mismos, pero si hay 5 personas dentro y llega un TS y luego un TH, no priorizaría al TH ...

Tampoco entiendo porque el P(sala) no está antes de mantenimiento.

La solución que se me ocurrió es:

INIT (mSala, 5);

INIT (cantEnSala, 0);

INIT (TH, 1);

INIT (TS, 1);

cantTHEsperando = 0;

int cantEnSala=0;


TH(){ 

P(cantEnSala)

if cantEnSala>=5

cantTHEsperando++;

P(TH)

cantEnSala++;

V(cantEnSala)


P(mSala)

entrar();

V(mSala)


P(cantTHEsperando)

if cantTHEsperando > 0

cantTHEsperando--;

V(TH)

else

V(TS)

V(cantTHEsperando)

P(cantEnSala)

cantEnSala--;

V(cantEnSala)

}



TS(){

P(cantEnSala)

if cantEnSala>=5

P(TS)

cantEnSala++;

V(cantEnSala)


P(mSala)

entrar();

V(mSala)


P(cantTHEsperando)

if cantTHEsperando > 0

cantTHEsperando--;

V(TH)

else

V(TS)

V(cantTHEsperando)


P(cantEnSala)

cantEnSala--;

V(cantEnSala)

}


En respuesta a Martin Aram Ghazarian Agemian

Re: Examen Febrero 2020 - Problema 2

de Jorge Merlino -

En general en todas las soluciones donde hay que dar prioridad se debe determinar un punto del código a partir del que se considera que "llegó" el proceso de mayor prioridad y a partir de allí tiene prioridad efectivamente. Antes de eso el sistema no sabe que existe el proceso más prioritario y por eso no le da prioridad. En este ejercicio la llegada del proceso prioritario es tomar el semáforo try. Una vez que el primer TH se lo queda no podrán entrar más TS. Si al momento que llega el TH ya hay un TS que tiene el semáforo se considera que llegó antes y por lo tanto el sistema no tiene por que darle prioridad al TH que llegó después (no puede saber el futuro). 

Sobre tu solución supongo que inicializaste mal los semáforos porque queda todo en deadlock al hacer P(cantEnSala) y además no entiendo por que TS y TH están inicializados en 1. Otra cosa es que la variable cantTHEsperando parce ser un entero y un semáforo a la vez,