你能将std :: recursive_mutex与std :: condition_variable结合起来吗?

时间:2013-01-14 17:18:48

标签: c++ multithreading c++11 std recursive-mutex

您可以将std::recursive_mutexstd::condition_variable合并,意味着执行以下操作:

std::unique_lock<std::recursive_mutex> lock(some_recursive_mutex)
some_condition_var.wait(lock);

如果不允许,为什么不呢?

我使用的是VC ++ 11。

2 个答案:

答案 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}}。