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

eme*_*esx 24 c++ multithreading std c++11 recursive-mutex

你可以结合std::recursive_mutex使用std::condition_variable,意思是做这样的事情:

std::unique_lock<std::recursive_mutex> lock(some_recursive_mutex)
some_condition_var.wait(lock);
Run Code Online (Sandbox Code Playgroud)

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

我正在使用VC++ 11.

Dav*_*e S 26

如果使用std::condition_variable_any,您可以允许任何类型的支持Lockable概念的对象.

但是,在递归互斥锁的情况下,您必须确保给定线程仅锁定递归互斥锁一次,因为条件变量仅在等待期间使用该unlock方法unique_lock一次.

  • "你必须确保给定的线程只锁定递归的互斥锁一次" - >这意味着你不能在递归的互斥锁上使用条件,不是吗?我的意思是条件的目的是与其他线程同步,如果不保证在等待期间解锁互斥锁,则无法工作. (5认同)
  • @HugoMaxwell 这取决于你的用例。如果您知道您的锁只有 1 级深度,那么您可以将其与条件一起使用。例如,如果互斥体的递归性质仅用于条件的信号发送端,则它将正常工作。 (3认同)