Подтвердить что ты не робот

Можете ли вы объединить 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.

4b9b3361

Ответ 1

Вы можете использовать std::condition_variable_any, который позволяет использовать любой тип объекта, который поддерживает концепцию Lockable.

Однако в случае рекурсивного мьютекса вам нужно убедиться, что данный поток только заблокировал рекурсивный мьютекс один раз, так как переменная условия будет использовать метод unlock на unique_lock один раз во время ожидания.

Ответ 2

Вы можете сделать это с помощью std::condition_variable_any, который может занять любой вид блокировки, но обычный std::condition_variable специализирован для std::unique_lock<std::mutex>.