在C ++ 11中使用BOOST scoped_lock替换

时间:2014-03-27 02:00:41

标签: c++ c++11 boost

我面临的情况是我必须用C ++ 11中的等效替换BOOST scoped_lock。在visual studio 2013下。由于c ++ 11不支持scoped_lock,我不确定以下内容的替换代码是什么。我应该去找lock_guard还是try_lock?

boost::mutex::scoped_lock objectLock(ObjectVectorMutex, boost::try_to_lock);
if(objectLock)
{
// code
}

在代码中我有以下内容'等待'声明

if(ObjectsCollection.empty())
{
//This is where we wait till something is filled
MotionThreadCondition.wait(objectLock);
ElapsedTime = 0;            
}

非常感谢任何指导。

1 个答案:

答案 0 :(得分:7)

使用std::unique_lock代替scoped_lock

std::unique_lock objectLock(ObjectVectorMutex, std::try_to_lock);

MotionThreadCondition将是std::condition_variable,使用方式相同。但是,您应该if(condition)而不是while(condition)来正确处理spurious wakeups