Разница является параметром для функций wait()
.Все функции ожидания в std::condition_variable
принимают параметр блокировки типа std::unique_lock<std::mutex>&
, тогда как все функции ожидания для std::condition_variable_any
являются всеми шаблонами, и принимают параметр блокировки типа Lockable&
, где Lockable
- параметр шаблона.
Это означает, что std::condition_variable_any
может работать с пользовательскими типами мьютекса и блокировки, а также с такими вещами, как boost::shared_lock
--- с любыми функциями-членами lock()
и unlock()
.
например
std::condition_variable_any cond;
boost::shared_mutex m;
void foo() {
boost::shared_lock<boost::shared_mutex> lk(m);
while(!some_condition()) {
cond.wait(lk);
}
}
Подробнее см. В документации по реализации just :: thread библиотеки потоков C ++ 11:
std::condition_variable
документация
std::condition_variable_any
документация
или ознакомьтесь с последним публичным проектом стандарта C ++ 11