Вы можете объединить std::recursive_mutex
с std::condition_variable
, значит сделать что-то вроде этого:
std::unique_lock<std::recursive_mutex> lock(some_recursive_mutex)
some_condition_var.wait(lock);
Если это не разрешено, то почему нет?
Я использую VC ++ 11.
Вы можете, если вы используете std::condition_variable_any
, что позволяет для любого типа объекта, который поддерживает концепцию Lockable.
Однако в случае рекурсивного мьютекса вы должны убедиться, что данный поток заблокировал рекурсивный мьютекс только один раз, так как переменная условия будет использовать только unlock
метод на unique_lock
один раз во время ожидания.
Вы можете сделать это с std::condition_variable_any
который может занять любой вид блокировки, но простой std::condition_variable
специализируется на std::unique_lock<std::mutex>
,