c++如何使用条件变量std::condition_variable 实现生产者消费者模型【并发编程】

admin 百科 14
需配合使用std::mutex、std::condition_variable和共享缓冲容器;wait必须用while循环防虚假唤醒;notify_one更高效;cv.wait(lock)原子地释放锁、等待、重加锁。

c++如何使用条件变量std::condition_variable 实现生产者消费者模型【并发编程】-第1张图片-佛山资讯网

std::condition_variable 实现生产者消费者模型,核心是让生产者在缓冲区满时等待,消费者在缓冲区空时等待,同时用互斥锁保护共享队列,用条件变量精准唤醒对应线程。

需要哪些同步组件

必须配合使用三样东西:std::mutex(保护共享队列)、std::condition_variable(协调等待与唤醒)、一个共享的缓冲容器(如 std::queue)。不能只用条件变量,它不带状态,也不提供互斥能力。

关键逻辑:wait() 必须搭配 while 循环检查条件

不能写成 if (queue.empty()) cv.wait(lock),因为存在虚假唤醒(spurious wakeup)和条件变化竞争。正确写法是:

  • while (queue.empty()) cv.wait(lock); —— 消费者等非空
  • while (queue.size() >= capacity) cv.wait(lock); —— 生产者等有空位

每次被唤醒后都要重新检查条件是否真正满足,这是安全前提。

立即学习“C++免费学习笔记(深入)”;

notify_one() 还是 notify_all()?

一般用 notify_one() 就够了:

标签: ai c++ 并发编程

发布评论 0条评论)

还木有评论哦,快来抢沙发吧~