C++线程管理

本文介绍了C++中的条件变量std::condition_variable及其与互斥锁(std::mutex)的配合,强调了notify_one和wait的作用以及std::lock_guard和std::unique_lock的不同之处,以确保线程间的同步和避免空执行。
摘要由CSDN通过智能技术生成

条件变量 std::condition_variable
https://zhuanlan.zhihu.com/p/224054283

条件变量是利用线程间共享的全局变量进行同步的一种机制,主要包括两个动作:一个线程等待条件变量的条件成立而挂起; 另一个线程使条件成立(给出条件成立信号)。为了防止竞争,条件变量的使用总是和一个互斥量结合在一起。

notify_one为主动线程
wait为被动线程, 只有当wait里面的条件成立了,wait才开始解锁

主要作用是防止wait线程空执行,只有等notify_one这个线程更新了之后,wait才会动,才会去尝试解锁;如果一直没有收到notify_one的信息,wait会一直wait

互斥锁
https://zhuanlan.zhihu.com/p/667870655

std::mutex: 互斥锁
std::lock_guard: 构造函数执行了mutex::lock(),在作用域结束时,自动调用析构函数,执行mutex::unlock()
std::unique_lock:支持std::lock_guard的功能,但是区别在于它提供更多的成员函数,比如:lock(),unlock()使用更加灵活,并且可以和condiction_variable一起使用控制线程同步。但是效率差一点,内存占用多一点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值