Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Problema con variables de condición.

Estas en el tema de Problema con variables de condición. en el foro de C/C++ en Foros del Web. Hola, tengo el siguiente el código y lo que sucede es que pare como si nunca se enviara la señal con pthread_cond_broadcast(&cvmisioneros); (tambien probe con ...
  #1 (permalink)  
Antiguo 13/11/2011, 14:47
 
Fecha de Ingreso: marzo-2007
Mensajes: 302
Antigüedad: 17 años, 9 meses
Puntos: 2
Pregunta Problema con variables de condición.

Hola, tengo el siguiente el código y lo que sucede es que pare como si nunca se enviara la señal con pthread_cond_broadcast(&cvmisioneros); (tambien probe con _signal) pero no sucede nada , es decir no vuelven a querer tomar el mutex d emisioneroLlegando. Y corroboré que si esntra en el metodo de barcoYaCruzo().
Alguna sugerencia? Grx!!

Código:
void monitor::misioneroLlegando(int threadid){
    pthread_mutex_lock(&mutex);

    if( puedeSubirMisionero() ){
        cmisioneros++;
        cpasajeros++;
        cout << "Misionero " << threadid << " sube al barco. \n";
    pthread_mutex_unlock(&mutex);
        subirPasajeros(threadid);
    } else {
    cout << "esperen a la prox";
        pthread_cond_wait(&cvmisioneros, &mutex);
    }
}

void monitor::barcoYaCruzo(){
    if(llego){    
        cpasajeros = 0;
        cmisioneros = 0;
        ccanibales = 0;
        flag = false;
        llego = false;
        pthread_cond_broadcast(&cvmisioneros);
    }
  #2 (permalink)  
Antiguo 13/11/2011, 19:11
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 16 años, 6 meses
Puntos: 61
Respuesta: Problema con variables de condición.

Siempre que el misionero llega se bloquea en el mutex, pero no siempre se desbloquea, pues depende si puedeSubirMisionero() si se ejecuta el pthread_mutex_unlock(&mutex). ¿está bien asi?
__________________
Visita mi perfil en LinkedIn
  #3 (permalink)  
Antiguo 13/11/2011, 20:15
 
Fecha de Ingreso: marzo-2007
Mensajes: 302
Antigüedad: 17 años, 9 meses
Puntos: 2
Respuesta: Problema con variables de condición.

Si es asi, cuando no se desbloque queda en la variable de condicion.
  #4 (permalink)  
Antiguo 14/11/2011, 10:26
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 16 años, 6 meses
Puntos: 61
Respuesta: Problema con variables de condición.

veo eso, pero no veo que despues de recibir el desbloqueo (despues del wait) haya un unlock. Si haces lock, tienes que hacer unlock, si haces wait y no haces unlock despues de haber esperado, esta mal, segun lo que entiendo.
__________________
Visita mi perfil en LinkedIn

Etiquetas: threads
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:16.