type
status
date
slug
summary
tags
category
icon
password
Email
我的个人主页:https://www.helloylh.com/
文章首发于我的个人博客:https://blog.helloylh.com/
欢迎大佬们来逛逛,有任何问题欢迎给我留言或者加我的联系方式。
condition_variable
condition_variable
类是同步原语,能用于阻塞一个线程,或同时阻塞多个线程,直至另一线程修改共享变量(条件)并通知condition_variable
。
当您在多线程编程中需要协调线程之间的操作,特别是当某个线程的执行依赖于另一个线程的状态变化时,
std::condition_variable
可以成为一个非常有用的工具。wait阻塞线程的执行:
当
is_ready
为false 的时候,条件不成立,则在cv.wait
的时候会阻塞该线程的执行,直到条件为真,即 is_ready 为true,则线程结束阻塞状态,继续执行。- wait:阻塞当前线程,直到条件变量被唤醒
notify通知线程执行:
- notify_one:可以通知其他任意一个等待线程。
- notify_all:可以通知所有等待的线程。
与 std::mutex 组合使用condition_variable
,以促进线程间交流。
常常见到的用途:
- 解决生产者-消费者问题:当生产者完成对产品的生产的时候,可以通知消费者立刻对产品进行消费.
- 在线程池中,多个线程的任务处理队列可能为空,如果有任务进入队列,即任务队列非空,则会通知任一线程开始执行任务。
- 当多个线程需要在某个共享资源上同步时,当等待的某个条件变为真,可以实现线程的协调关系。
实现一个线程安全的队列
- 作者:Yuleo
- 链接:https://www.helloylh.com/article/multithread5
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。