我以这种方式使用boost::mutex::scoped_lock
:为什么Boost 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做其他线程的信号;
但是,这似乎不起作用,因为其他线程无法获得互斥体锁!
我假设通过将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更适合您的需求 – neuro 2009-08-10 17:55:25
看到您的信令代码它可以在某些情况下工作,但取决于您所做的处理(您的意见)。如果有其他同步器,则会更糟糕。条件变量是实现这一目标的方法。我发布了用于执行此类同步的代码。 – neuro 2009-08-10 18:19:19
信号线程的“工作”不会锁定其他任何东西。它独立运行。 – Alex 2009-08-10 18:27:08