C++ C+中的增强作用域U锁更换+;11
我面临的情况是,我必须用C++11中的等价物替换BOOST作用域的_锁。在visual studio 2013下。由于c++11不支持作用域锁定,我不确定下面的替换代码是什么。我应该去锁门还是试试锁门C++ C+中的增强作用域U锁更换+;11,c++,c++11,boost,C++,C++11,Boost,我面临的情况是,我必须用C++11中的等价物替换BOOST作用域的_锁。在visual studio 2013下。由于c++11不支持作用域锁定,我不确定下面的替换代码是什么。我应该去锁门还是试试锁门 boost::mutex::scoped_lock objectLock(ObjectVectorMutex, boost::try_to_lock); if (objectLock) { // ... } 下面的代码中有下面的“wait”语句 if (ObjectsCollection.e
boost::mutex::scoped_lock objectLock(ObjectVectorMutex, boost::try_to_lock);
if (objectLock) {
// ...
}
下面的代码中有下面的“wait”语句
if (ObjectsCollection.empty()) {
// This is where we wait til something is filled
MotionThreadCondition.wait(objectLock);
ElapsedTime = 0;
}
非常感谢您提供任何指导。使用而不是范围锁定
:
std::unique_lock objectLock(ObjectVectorMutex, std::try_to_lock);
和
MotionThreadCondition
将是一个,使用相同的方式。但是,如果(条件)您应该在(条件)期间执行while(条件)
来正确处理,而不是if(条件)
。实际上,这不仅是处理虚假唤醒的问题,而且是简单的并发正确性问题。即使没有虚假,循环也是必要的,因为在3线程程序的情况下,其他一些参与者可以更快地锁定互斥锁并修改条件。@v.oddou我不明白。我们实际上不知道他是如何使用条件变量的,它可能根本就没有条件(由于虚假唤醒而不安全);在这种情况下,他需要if(collection.empty()){while(otherCondition)var.wait(lock);}
谢谢你的回答@v、 oddou-感谢您提供有关条件变量的提示。我坚持使用if(collection.empty())方法!