admin管理员组文章数量:1599537
condition在英文的解释为条件,variable为变量,综合在一起即条件变量。我是个小白,对这个很陌生,感觉可移植性太高了,并没有清晰的概念。只能划个框架,它在这个专栏里,所以它与C++多线程有关。简化处理,<condition_variable>这个库函数就是专门处理多线程之间对程序的占用的,类似红绿灯。一个灯有红绿黄三个变量,每个变量作为不同的条件传出不同的信息使人们做出不同的判断。即<condition_variable>为条件发出者,控制多线程调度的一个库函数。
在C++码源中仅有一个condition_variable是不够的,我也不知为啥。语法中还需要与mutex等进行交互。因为我在实际编码中未牵涉到condition_variable_any,将其简化处理。有condition_variable必有mutex与之进行交互,从而控制线程。
我看了其它的代码,其中在多线程中基本有一段
std::condition_variable cond;
查看了这个std::condition_variable后,基本懵了。它属于mutex.h。怀疑人生了,既然condition_variable在mutex中,那#include <condition_variable>弄了个寂寞。然后我默默删去了这句#include<condition_variable>,程序正常运行。我用的是VS2017,如有指点欢迎赐教。。在mutex.h中condition_variable是一个类
class condition_variable
{ // class for waiting for conditions
public:
...
void notify_one() noexcept
{ // wake up one waiter
_Cnd_signalX(_Mycnd());
}
void notify_all() noexcept
{ // wake up all waiters
_Cnd_broadcastX(_Mycnd());
}
void wait(unique_lock<mutex>& _Lck)
{ // wait for signal
// Nothing to do to comply with LWG 2135 because std::mutex lock/unlock are nothrow
_Cnd_waitX(_Mycnd(), _Lck.mutex()->_Mymtx());
}
template<class _Predicate>
void wait(unique_lock<mutex>& _Lck, _Predicate _Pred)
{ // wait for signal and test predicate
while (!_Pred())
wait(_Lck);
}
...
};
condition_variable这个类比较长,我简化了。将一些模板,寄存器等等我看不明白的先丢到一边。留下了三个内函数即notify_one(),notify_any(),wait()和它的一个模板。水平有限,不管细节,到此够用,如有补充,欢迎赐教。总结出condition_variable与mutex大概有三种用法,如源代码所示,notify_one()为wake up one waiter,即唤醒一个等待者;notify_any()唤醒所有等待者;wait()使线程等待。
本文标签: conditionvariable
版权声明:本文标题:简述condition_variable的用法 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dianzi/1728323193a1154094.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论