编程学习
🗒️C++多线程编程(5):条件变量
00 分钟
2023-11-19
2023-11-23
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 ,以促进线程间交流。
常常见到的用途:
  1. 解决生产者-消费者问题:当生产者完成对产品的生产的时候,可以通知消费者立刻对产品进行消费.
  1. 在线程池中,多个线程的任务处理队列可能为空,如果有任务进入队列,即任务队列非空,则会通知任一线程开始执行任务。
  1. 当多个线程需要在某个共享资源上同步时,当等待的某个条件变为真,可以实现线程的协调关系。

实现一个线程安全的队列


评论
  • Twikoo
  • Valine