简述unique_lock的用法

       unique_lock用来配合condition_variable,即帮忙控制C++中多线程的管理。打个例子,时间为水,进程是个大箱子,里面有许多水桶,一个小水桶是一个线程,水流进大箱子,unique就是水龙头,而condition_variable是导管,mutex是控制导管和水龙头的自动化装置,导管一侧的水量到达一定时,mutex控制水龙头关上水,导管偏移刷新,mutex再控制水龙头开水,一直到预想的输出结果,水龙头这次旅程永远关闭,销毁后无法再开启。

       我见许多多线程使用unique_lock的操作如下

mutex m;
unique_lock<mutex>lk(m);

       找了源代码,这是锁的操作。

void lock()
		{	// lock the mutex
		unique_lock<mutex> _Lock(_My_mutex);
		while (_My_locked != 0)
			_My_cond.wait(_Lock);
		_My_locked = UINT_MAX;
		}

      找了其中的定义,即用了cond.wait()的操作,之后用condition_variable类中的notify_all()或notify_one操作唤醒。

private:
	mutex _My_mutex;
	condition_variable _My_cond;
	unsigned int _My_locked;

      之后从unlock的操作中也找到了condition_variable中的操作,使用的是notify_one的操作。

void unlock()
		{	// unlock the mutex
			{
			// The lock here is necessary
			lock_guard<mutex> _Lock(_My_mutex);
			_My_locked = 0;
			}
		_My_cond.notify_one();
		}

      这里就简单的介绍了unqiue_lock中lock与unlock的操作。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值