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)
}