Problemas de recurrencia: lavabo unisex
Problema del lavabo unisex: Una oficina tiene en su quinta planta un único lavabo que es
unisex. Para el funcionamiento correcto de este lavabo los empleados han de cumplir las
siguientes reglas:
• En el lavabo no puede haber hombres y mujeres a la vez.
• La capacidad máxima es de 3 personas.
Escribe el pseudocódigo de los procesos Hombre() y Mujer() para que se garanticen estas
dos condiciones en el acceso al lavabo mediante semáforos.
#defíne NUM 3
#defíne mujeres 4
#defíne hombres 4
lavabo = Controla las variables que dan acceso al lavabo
h = Controla el acceso de los hombres
m = Controla el acceso de las mujeres
cola = Evita la inhanicion
int personas;
void main()
{
int i;
InitSemaphore(lavabo,NUM);
InitSemaphore(h, 1);
InitSemaphore(m, 1);
InitSemaphore(cola, 1);
for (i=0 ;i<mujeres;i++)
{
if(!(aux=fork()))
{
mujer();
}
}
for (i=0; i<mujeres+hombres; i++)
{
if(!(aux=fork()))
{
hombre();
}
}
}
void hombre()
{
int duracionuso;
while(true )
{
wait(cola);
wait(shombres);
if(personas==0 )
wait(smujeres);
personas++;
signal(shombres);
signal(cola);
wait(lavabo);
signal(lavabo);
wait(shombres);
personas--;
if (!personas)
signal(smujeres);
signal(shombres);
}
}
voíd mujer()
{
int duracionuso;
while( )
{
wait(cola);
wait(smujeres);
if(personas==0 )
wait(shombres);
personas++;
signal(smujeres);
signal(cola);
wait(lavabo);
signal(lavabo);
wait(smujeres);
personas--;
if (!personas)
signal(shombres);
signal(smujeres);
}
}
unisex. Para el funcionamiento correcto de este lavabo los empleados han de cumplir las
siguientes reglas:
• En el lavabo no puede haber hombres y mujeres a la vez.
• La capacidad máxima es de 3 personas.
Escribe el pseudocódigo de los procesos Hombre() y Mujer() para que se garanticen estas
dos condiciones en el acceso al lavabo mediante semáforos.
#defíne NUM 3
#defíne mujeres 4
#defíne hombres 4
lavabo = Controla las variables que dan acceso al lavabo
h = Controla el acceso de los hombres
m = Controla el acceso de las mujeres
cola = Evita la inhanicion
int personas;
void main()
{
int i;
InitSemaphore(lavabo,NUM);
InitSemaphore(h, 1);
InitSemaphore(m, 1);
InitSemaphore(cola, 1);
for (i=0 ;i<mujeres;i++)
{
if(!(aux=fork()))
{
mujer();
}
}
for (i=0; i<mujeres+hombres; i++)
{
if(!(aux=fork()))
{
hombre();
}
}
}
void hombre()
{
int duracionuso;
while(true )
{
wait(cola);
wait(shombres);
if(personas==0 )
wait(smujeres);
personas++;
signal(shombres);
signal(cola);
wait(lavabo);
signal(lavabo);
wait(shombres);
personas--;
if (!personas)
signal(smujeres);
signal(shombres);
}
}
voíd mujer()
{
int duracionuso;
while( )
{
wait(cola);
wait(smujeres);
if(personas==0 )
wait(shombres);
personas++;
signal(smujeres);
signal(cola);
wait(lavabo);
signal(lavabo);
wait(smujeres);
personas--;
if (!personas)
signal(shombres);
signal(smujeres);
}
}

Comentarios
Publicar un comentario