【发布时间】:2010-11-18 09:07:12
【问题描述】:
我一直以这种方式使用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;
}
}
谢谢!
【问题讨论】:
-
scoped_lock 对象在右括号处被销毁,互斥锁被释放。请张贴代码的信号部分。顺便说一句, boost::condition_variable 更适合您的需求
-
好吧,看看你的信号代码,它可以在某些情况下工作,但取决于你所做的处理(你的 cmets)。如果有其他同步,那就更糟了。条件变量就是这样做的方法。我已经发布了我用来做这种同步的代码。
-
信号线程的“工作”不会锁定其他任何东西。它独立运行。
标签: c++ multithreading boost mutex