<aside> 🤩 博客地址:nicooo-wang.github.io

</aside>

面向对象的生产者消费者模板

生产者消费者模型是一个常见的设计模式,通常用于多线程或多进程环境下的任务协调和数据共享。

这种设计模式的主要目标是实现生产者和消费者之间的协调和同步,充分利用系统的线程资源,同时避免生产者在缓冲区已满时仍然继续生产,消费者在缓冲区为空时仍然继续消费。

生产者消费者模型广泛应用于各种场景,例如网站的请求的处理、安卓系统中UI界面的渲染(Buffer Queue)...它可以帮助实现任务的异步执行,提高系统的吞吐量和效率。通过生产者消费者模型,可以实现请求的协调和同步,增大系统的吞吐量和效率。

本项目的目的是通过实现一个单生产者单消费者Pipeline模板,采用面向对象进行设计,将Pipeline中的复杂操作进行封装。

项目大纲

项目地址:https://github.com/Nicooo-Wang/Pipeline-Queue

该项目分为3个子项目,逐步地完成一个C++面向对象地生产者消费者Pipeline项目实现

  1. 简单的线程间通信:使用mutex、condition_variable完成一个生产者消费者Pipeline;请切换pipe-queue-func分支
  2. 线程类的封装:封装一个线程类,通过class的声明周期显示控制线程的声明周期;请切换thread-class分支
  3. 面向对象的生产者消费者Pipeline:综合项目1、2,完成Pipleline class,将生产者消费者封装在Pipeline class中;请切换Producer-Consumer-Pipeline分支

Chapter 1 简单的线程间通信

请切换项目branch至pipe-queue-func查看代码

项目目的

创建两个线程,一个Producer,一个Consumer,通过condition_variable进行通信,完成一个生产者消费者流水线。

Consumer的限制:如果pipe中的buffer数量为0,则进入睡眠,等待Producer线程放入数据后唤醒。

Producer的线程:如果pipe中buffer的数量大于等于MAX_BUFFER_SIZE,则进入睡眠,等待Consumer线程消耗buffer后唤醒;同时Producer生产work_times个buffer后退出线程。

代码剖析