虚假唤醒和原子操作

本文探讨了C++编程中遇到的虚假唤醒问题,指出在使用wait时应结合lambda表达式进行条件判断以避免虚假唤醒。此外,解释了原子操作的原理,强调原子操作仅保证读取和存储的原子性,防止CPU上下文切换导致的数据不一致。最后,讨论了线程池的线程创建数量限制,建议通常不超过200个线程,并根据阻塞情况适当预留额外线程。
摘要由CSDN通过智能技术生成

一、虚假唤醒:
notify_one()或者notify_all()唤醒wait()后,实际有些线程可能不满足唤醒的条件:例如使用 notify_one() 两个线程在启动时的第一次唤醒,例如在使用 notify_all() 时多个线程都被唤醒共享区却只有满意少数线程操作,这时就会造成其他线程被虚假唤醒,可以在wait中再次进行判断解决虚假唤醒
解决:wait中要有第二个参数(lambda),并且这个lambda中要正确判断所处理的公共数据是否存在。
例如:(通过lambda进行判断防止虚假唤醒)

	my_con.wait(myUnique, [this] {
   
		if (!myQue
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值