c++ 条件变量 虚假唤醒(c++11条件变量 使用)

c++ 条件变量 虚假唤醒(c++11条件变量 使用)直接拿 wiki 上的例子描述吧 https en wikipedia org wiki 映射到 c 11 的例子如下 条件变量原语用代替 惯用法如下 我的疑问是 参照 condition variabl 描述 并没有给出虚假唤醒的触发条件 而有两个成员变量和 notify one 只会唤醒一个等待中的线程 notify all 唤醒所有等待中的线程那么

大家好,我是讯享网,很高兴认识大家。



 

讯享网
讯享网

我的疑问是:

参照condition_variabl描述,并没有给出虚假唤醒的触发条件. 而有两个成员变量和
notify_one: 只会唤醒一个等待中的线程
notify_all: 唤醒所有等待中的线程
那么,是否只有用了这个接口才会触发虚假唤醒,如果代码中使用了第一个,完全不需要关注这个? 除此之外,还有什么条件会触发虚假唤醒么?

补充

我就是这里有疑问,最开始也理解虚假唤醒应该是触发.

但实际上我按照会虚假唤醒写法去触发,并没有触发出来,这里是代码,编译
例子是cppref上改的,一个线程producer作为生产者,consumer/consumer2线程是两个消费者线程,如果队列里面有数据产生,producer发送出来,唤醒消费者线程.
预期:两个等待状态的线程每次都被唤醒,而第一个个被唤醒的线程把数据取出来后,活就干完了,不需要另外个线程了.
实际:两个线程总是交替被唤醒.


讯享网

// condition_variable.cpp

 

producing 0
consuming 0 consumer1
thread id: 1 wake up
producing 1
consuming 1 consumer2
thread id: 2 wake up
producing 2
consuming 2 consumer1
thread id: 1 wake up
producing 3
consuming 3 consumer2
thread id: 2 wake up
producing 4
consuming 4 consumer1
thread id: 1 wake up
thread id: 2 wake up

小讯
上一篇 2025-04-28 22:44
下一篇 2025-06-11 18:47

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/156239.html