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