Sincronización de baño y cola de hilos.

Para la tarea se nos ha dado el problema de la sincronización del baño. He estado luchando tratando de averiguar cómo empezar. Lo que me gustaría hacer cuando una persona ingresa al baño (función personEnterRestrrom), si son mujeres y no hay hombres en el baño al que ingresan, si no entran en una cola para las mujeres que esperan. Quiero hacer lo mismo para los hombres. Intenté implementar una cola que contenga subprocesos, pero no puedo hacer que funcione. Luego en la función personLeavesRestroom. Cuando una persona se va, si no queda nadie en el baño, comienza la otra cola. Aquí está mi código, sé que estoy muy lejos, porque necesito un poco de orientación y no estoy muy familiarizado con los semáforos.

<code>//declarations
pthread_mutex_t coutMutex;
int menInBath;
int womanInBath;
int menWaiting;
int womenWaiting;
queue<pthread_mutex_t>men;
queue<pthread_mutex_t>women;


 personEnterRestroom(int id, bool isFemale)
 {
   // LEAVE THESE STATEMENTS                                                 
   pthread_mutex_lock(&coutMutex);
  cout << "Enter: " << id << (isFemale ? " (female)" : " (male)") << endl;
  pthread_mutex_unlock(&coutMutex);

  // TODO: Complete this function                                           
 if(isFemale && menInBath<=0)
  {
     womanInBath++;
   }
 else if(isFemale && menInBath>0)
 {
  wait(coutMutex);
  women.push(coutMutex);
}
 else if(!isFemale && womanInBath<=0)
{
  menInBath++;
}
else
{
  wait(coutMutex);
  men.push(coutMutex);
}
</code>

}

<code>   void
    personLeaveRestroom(int id, bool isFemale)  
    {
   // LEAVE THESE STATEMENTS                                                 
    pthread_mutex_lock(&coutMutex);
    cout << "Leave: " << id << (isFemale ? " (female)" : " (male)") << endl;
    pthread_mutex_unlock(&coutMutex);

  if(isFemale)
    womanInBath--;
  if(womanInBath==0)
    {
       while(!men.empty())
         {
           coutMutex=men.front();
           men.pop();
           signal(coutMutex);
         }
     }

}
</code>

Respuestas a la pregunta(1)

Su respuesta a la pregunta