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

}

Comentarios

Entradas populares