您可以将std::recursive_mutex
与std::condition_variable
合并,意味着执行以下操作:
std::unique_lock<std::recursive_mutex> lock(some_recursive_mutex)
some_condition_var.wait(lock);
如果不允许,为什么不呢?
我使用的是VC ++ 11。
答案 0 :(得分:20)
如果使用std::condition_variable_any
,则可以使用允许任何类型的支持Lockable概念的对象。
但是,在递归互斥锁的情况下,您必须确保给定线程仅锁定递归互斥锁一次,因为条件变量仅使用unlock
上的unique_lock
方法一次在等待期间。
答案 1 :(得分:3)
您可以使用std::condition_variable_any
来执行此操作,该std::condition_variable
可以使用任何类型的可锁定但std::unique_lock<std::mutex>
专用于{{1}}。