讯享网
讯享网
我的疑问是:
参照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

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