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

Если это не разрешено, то почему нет?

Я использую VC ++ 11.

18

Решение

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

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

19

Другие решения

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

3

По вопросам рекламы [email protected]