Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/156.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C+中的增强作用域U锁更换+;11_C++_C++11_Boost - Fatal编程技术网

C++ C+中的增强作用域U锁更换+;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

我面临的情况是,我必须用C++11中的等价物替换BOOST作用域的_锁。在visual studio 2013下。由于c++11不支持作用域锁定,我不确定下面的替换代码是什么。我应该去锁门还是试试锁门

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())方法!