生产者消费者问题是一个典型的多线程问题。本文主要讨论
1. 生产者消费者使用场景
2. 怎么用C++11的线程来实现生产者消费者
生产者消费者使用场景
1. 多媒体的pipeline
比如在Android中,Camera是一个生产者,Video是一个消费者。它们之间通过BufferQueue来进行buffer传递。BufferQueue底层是通过binder来实现跨进程调用。
2. 图像处理中实现Pipeline管理
在图像处理中,对图像的处理是分成多个阶段的,每个阶段都是消费者和生产者。从上一阶段接收数据,处理,交给下个阶段进行进一步的处理。
1. 怎么用C++11的线程来实现生产者消费者
怎么用C++11的线程来实现生产者消费者
在C++11之前,没有标准的线程库,一般都是自己对pthread进行封装,或者用开源的比如,boost, Android AOSP utils.
有了C++11的标准线程库,我们就很容易的实现一个在不同OS之间方便移植的生产者消费者模型。
下面是参考程序,在ubuntu 16.04下面编译: g++ -std=c++11 -pthread a.cpp
a.cpp:
#include <queue>
#include <condition_variable>
#include <mutex>
#include <thread>
#include <iostream>
#include <unistd.h>
usin