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>