void *mujer(){ mujer_quiere_entrar(); sleep(3); mujer_sale(); pthread_exit(NULL); }
void * mujer_quiere_entrar() { pthread_mutex_lock(&mutex_mujeres); mujeres_espera++; printf("Llega una mujer (%d en espera)\n",mujeres_espera); pthread_mutex_unlock(&mutex_mujeres); pthread_mutex_lock(&mutex_bano); if(ocupado == 0) pthread_cond_wait(&permitir_mujeres,&mutex_bano); if(ocupado == 2 || ocupado == 1) { ocupado = 1; pthread_mutex_lock(&mutex_mujeres); mujeres_espera--; mujeres_dentro++; printf("Entra una mujer (%d en espera)\n",mujeres_espera); printf("Sanitario ocupado por mujeres\n"); pthread_mutex_unlock(&mutex_mujeres); } pthread_mutex_unlock(&mutex_bano); sleep(rand() % 5); mujer_sale(); pthread_exit(NULL); }
void * sacarPersona (void * arg){ while (abierto){ pthread_mutex_lock(&mutexBanio); if (personasEnBanio > 0){ if (tipodDeBanio == 1 ){ mujer_sale(); } else { hombre_sale(); } if (personasEnBanio == 0){ printf("Sanitario vacio\n"); } } pthread_mutex_unlock(&mutexBanio); sleep(5); } pthread_exit(NULL); }
void * mujer_quiere_entrar(void * p) { pthread_mutex_lock(&sumaM); mujeres++; printf("Mujer quiere entrar (En espera %d) \n", mujeres); pthread_mutex_unlock(&sumaM); pthread_mutex_lock(&Mbano); if(dentro == V){ dentro = M; printf("Sanitario ocupado por Mujeres \n"); }else if(dentro == H){ pthread_cond_wait(&condM, &Mbano); dentro = M; } bano++; pthread_mutex_unlock(&Mbano); pthread_mutex_lock(&sumaM); mujeres--; printf("Mujer entra (En espera %d) \n", mujeres); pthread_mutex_unlock(&sumaM); mujer_sale(); }