void * hombre_quiere_entrar() { pthread_mutex_lock(&mutex_hombres); hombres_espera++; printf("Llega un hombre (%d en espera)\n",hombres_espera); pthread_mutex_unlock(&mutex_hombres); pthread_mutex_lock(&mutex_bano); if(ocupado == 1) pthread_cond_wait(&permitir_hombres,&mutex_bano); if(ocupado == 2 || ocupado == 0) { ocupado = 0; pthread_mutex_lock(&mutex_hombres); hombres_espera--; hombres_dentro++; printf("Entra un hombre (%d en espera)\n",hombres_espera); printf("Sanitario ocupado por hombres\n"); pthread_mutex_unlock(&mutex_hombres); } pthread_mutex_unlock(&mutex_bano); sleep(rand() % 20); hombre_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 * hombre_quiere_entrar(void * p) { pthread_mutex_lock(&sumaH); hombres++; printf("Hombre quiere entrar (En espera %d) \n", hombres); pthread_mutex_unlock(&sumaH); pthread_mutex_lock(&Mbano); if(dentro == V){ dentro = H; printf("Sanitario ocupado por Hombres \n"); }else if(dentro == M){ pthread_cond_wait(&condH, &Mbano); dentro = H; } bano++; pthread_mutex_unlock(&Mbano); pthread_mutex_lock(&sumaH); hombres--; printf("Hombre entra (En espera %d) \n", hombres); pthread_mutex_unlock(&sumaH); hombre_sale(); }
void *hombre(){ hombre_quiere_entrar(); sleep(2); hombre_sale(); pthread_exit(NULL); }