原文转自:http://www.tanjp.com (即时修正和更新)
双缓冲安全队列(DoubleCacheQueue)
双缓冲区,故名思义就是要有两个缓冲区(简称A和B)。这两缓冲区,总是一个用于生产者,另一个用于消费者。当缓冲区触发某个条件时,进行一次切换(先前被生产者写入的转为消费者取出,先前消费者取出的转为生产者写入)。而这个触发的条件,一般是以快速消费完为主导(避免内存堆积太多数据),所以一般当消费缓冲区为空时,就触发交换。由于生产者和消费者不会同时操作同一个缓冲区(不发生冲突),所以就不需要在读写每一个数据单元的时候都进行同步/互斥操作。
PS: 多线程安全,当生产或消费的速度不平衡时,交换次数较少,能很明显提高性能。
部分代码实现:
template<typename tpType>
class DoubleCacheQueue
{
typedef std::queue< tpType > Queue;