简述condition_variable的用法

       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()使线程等待。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值