Can you combine std::recursive_mutex with std::condition_variable?

emesx picture emesx · Jan 14, 2013 · Viewed 8.2k times · Source

Can you combine std::recursive_mutex with std::condition_variable, meaning do something like this:

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

If it's not allowed, then why not?

I am using VC++11.

Answer

Dave S picture Dave S · Jan 14, 2013

You can, if you use std::condition_variable_any, which allows for any type of object that supports the Lockable concept.

However, in the case of recursive mutex, you do have to ensure that the given thread has only locked the recursive mutex once, since the condition variable only will use the unlock method on the unique_lock once during the wait.