Joh*_*don 19 c++ std condition-variable c++11
我可能失去了一些东西很明显,但我看不到之间有什么区别std::condition_variable和std::condition_variable_any.为什么我们两个都需要?
Ant*_*ams 19
区别在于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);
    }
}
有关详细信息,请参阅C++ 11线程库的just :: thread实现的文档:
std::condition_variable_any 文件
ken*_*ytm 15
std::condition_variable更专业,因此当你不需要灵活性时可以更有效率std::condition_variable_any.
来自N3290§30.5[thread.condition]/1
Class
condition_variable提供了一个条件变量,它只能在类型的对象上等待unique_lock<mutex>,从而在某些平台上实现最高效率.Classcondition_variable_any提供了一个通用条件变量,可以等待用户提供的锁类型的对象.
实际上,在LLVM的libc ++中,condition_variable_any使用condition_variableshared_mutex上更专业的(使用pthread_cond_t)来实现.
| 归档时间: | 
 | 
| 查看次数: | 5472 次 | 
| 最近记录: |