我面临的情况是我必须用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;
}
非常感谢任何指导。
答案 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。