Я использовал 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's 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;
}
}
Спасибо!