Пример #1
0
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);
}
Пример #3
0
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);
}