He estado usando boost::mutex::scoped_lock
de esta manera:¿Por qué Boost scoped_lock no desbloquea el mutex?
void ClassName::FunctionName()
{
{
boost::mutex::scoped_lock scopedLock(mutex_);
//do stuff
waitBoolean=true;
}
while(waitBoolean == true){
sleep(1);
}
//get on with the thread's activities
}
Básicamente se establece waitBoolean, y las otras señales de hilo que se hace estableciendo waitBoolean en false;
Esto no parece funcionar, sin embargo, porque el otro hilo no puede obtener un bloqueo en mutex_ !!
Estaba asumiendo que al ajustar el scoped_lock entre paréntesis terminaría su bloqueo. Este no es el caso? La lectura en línea dice que solo abandona el mutex cuando se llama al destructor. ¿No será destruido cuando salga del alcance local?
señalización de la parte de código:
while(running_){
boost::mutex::scoped_lock scopedLock(mutex_);
//Run some function that need to be done...
if(waitBoolean){
waitBoolean=false;
}
}
Gracias!
El objeto scoped_lock se destruye en el corchete de cierre y se libera el mutex. Por favor, publique la parte de señalización del código. Por cierto, un boost :: condition_variable es mejor para sus necesidades – neuro
Ver bien su código de señalización puede funcionar en ciertos casos, pero depende del procesamiento que haga (sus comentarios). Si hay otra sincronización, es peor. Una variable de condición es la forma de hacerlo. He publicado el código que uso para hacer este tipo de sincronización. – neuro
El "trabajo" del hilo de señalización no bloquea nada más. Se ejecuta de forma independiente. – Alex