Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.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++ 您能将std::recursive\u互斥体与std::condition\u变量组合起来吗?_C++_Multithreading_C++11_Std_Recursive Mutex - Fatal编程技术网

C++ 您能将std::recursive\u互斥体与std::condition\u变量组合起来吗?

C++ 您能将std::recursive\u互斥体与std::condition\u变量组合起来吗?,c++,multithreading,c++11,std,recursive-mutex,C++,Multithreading,C++11,Std,Recursive Mutex,您能否将std::recursive_mutex与std::condition_variable组合,意思是执行以下操作: std::unique_lock<std::recursive_mutex> lock(some_recursive_mutex) some_condition_var.wait(lock); std::唯一锁(一些递归互斥) 某些条件变量等待(锁定); 如果这是不允许的,那为什么不呢 我用的是VC++11。你可以用一个std::condition\u变量\

您能否将
std::recursive_mutex
std::condition_variable
组合,意思是执行以下操作:

std::unique_lock<std::recursive_mutex> lock(some_recursive_mutex)
some_condition_var.wait(lock);
std::唯一锁(一些递归互斥)
某些条件变量等待(锁定);
如果这是不允许的,那为什么不呢


我用的是VC++11。

你可以用一个
std::condition\u变量\u any
来实现这一点,这个变量可以接受任何类型的可锁定,但是简单的
std::condition\u变量
专用于
std::unique\u lock

std::condition\u variable\u any,它允许支持可锁定概念的任何类型的对象


但是,在递归互斥锁的情况下,您必须确保给定线程只锁定了递归互斥锁一次,因为在等待期间,条件变量只会在
unique\u lock
上使用
unlock
方法一次。

“您必须确保给定线程只锁定了递归互斥锁一次。”->这意味着不能在递归互斥体上使用条件,不是吗?我的意思是,条件的目的是与其他线程同步,如果不能保证在等待期间解锁互斥锁,那么这将不起作用。@HugoMaxwell这取决于您的用例。如果你知道你的锁只有1级深,那么你可以使用它的条件。例如,如果互斥体的递归性质只在条件的信令端使用,那么它就可以正常工作。