viernes, 7 de diciembre de 2012

Actividad Voluntaria 2: Problema del 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. 





 semáforos:
 mutex_hombre(1);        //inicializados a 1(abierto)
 mutex_mujer(1);
 lavabo(1);
 h_aforo(3);  //capacidad máxima (3)
 m_aforo(3);  
 esperando(1);


int contador_hombres=0;
int contador_mujeres=0;  


hombre()
{
 
while(true){
    wait(esperando);   //espera aviso para entrar
    wait(mutex_hombre);  //espera aviso de paso para hombres
    contador_hombres++; //incrementamos numero de hombres
    if(contador_hombres==1)
        wait(lavabo); //espera para usar el lavabo
    signal(mutex_hombre); //avisa para permitir el paso a hombres
    signal(esperando); //da el aviso para entrar
    wait
(h_aforo);  //espera a que haya hueco y entra al lavabo
    //usa lavabo
    signal
(h_aforo); //libera el hueco
    wait(mutex_hombre); 
//espera aviso de paso para hombres
    contador_hombres--;
    if(contador_hombres==0) //si no hay hombres
        signal(lavabo);  //
avisa que lavabo esta libre
    signal(mutex_hombre) // avisa para permitir el paso a hombres
 }
}
 mujer()
{

   while(true){
    wait(esperando);
    wait(mutex_mujer);
    contador_mujeres++;
    if(contador_mujers==1)
        wait(lavabo);
    signal(mutex_mujer);
    signal(esperando);
    wait
(h_aforo);
    //usa lavabo
    signal
(h_aforo);
    wait(mutex_mujer);
    contador_mujeres--;
    if(contador_mujers==0)
        signal(lavabo);
    signal(mutex_mujer)
   }
}

1 comentario: