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级深,那么你可以使用它的条件。例如,如果互斥体的递归性质只在条件的信令端使用,那么它就可以正常工作。