参见【并发编程九】c++线程同步——互斥(mutex)
- 例子
在一条生产线上有一个仓库,当生产者生产时需要锁住仓库独占,而消费者去产品时也需要锁住仓库独占。
如果,生产者发现仓库满了,那么他就不能生产了,编程了阻塞状态。但是此时生产者独占仓库,消费者又无法进入仓库消耗产品,这样就造成了一个僵死的状态。
我们需要一种机制,当互斥量被锁住以后发现当前线程还是无法完成自己的操作,那么它应该释放互斥量,让其他线程哦工作。
- 1、可以采用轮询的方式,不停的查询你需要的条件。
- 2、让系统来帮你查询条件,使用条件变量。
- demo
- 输出
- 尝试获取锁的人会一直等待,浪费cpu资源。(功耗和性能浪费)
- 提供睡眠/唤醒机制,避免无意义的等待。
- 通知
- 等待
简单说下,如果是新人,简单理解wait和notify_one两个函数就行了,基本就明白了条件变量的原理,如下面的demo,wait就是等待notify的通知后再执行
- 输出
- cpu占用率
- 使用条件变量的意义在于,消费者在没有可消费的产品时,采用休眠,而非无意义的空转,浪费cpu的计算资源。
- 【并发编程十一】c++线程同步——future
- 参见【并发编程十二】c++线程同步——信号量(semaphore)




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