Я использовал boost::mutex::scoped_lock
следующим образом:
void ClassName::FunctionName()
{
{
boost::mutex::scoped_lock scopedLock(mutex_);
//do stuff
waitBoolean=true;
}
while(waitBoolean == true ){
sleep(1);
}
//get on with the thread activities
}
В основном он устанавливает waitBoolean, а другой поток сигнализирует, что это делается, устанавливая waitBoolean в false;
Это, похоже, не работает, потому что другой поток не может получить блокировку на mutex_!!
Я предполагал, что, завернув scoped_lock в скобки, я бы прекратил его блокировку. Это не так? Чтение в Интернете говорит о том, что он только отбрасывает мьютекс при вызове деструктора. Разве это не будет уничтожено, если оно выходит из этого локального масштаба?
Сигнальная часть кода:
while(running_){
boost::mutex::scoped_lock scopedLock(mutex_);
//Run some function that need to be done...
if(waitBoolean){
waitBoolean=false;
}
}
Спасибо!