caffe数据读取的双阻塞队列说明

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了caffe数据读取的双阻塞队列说明相关的知识,希望对你有一定的参考价值。

caffe的datareader类中

  class QueuePair {
   public:
    explicit QueuePair(int size);
    ~QueuePair();

    BlockingQueue<T*> free_;
    BlockingQueue<T*> full_;

  DISABLE_COPY_AND_ASSIGN(QueuePair);
  };

  

这个就是双阻塞队列,先将free队列填充到最大长度,然后按照如下规则:

1,每当生产者push时,先将full队列pop,如果full为空,不可pop,那么表明free队列已满,则free队列不可push,如果full队列可以pop,那么执行pop,并对free队列push。

2,每当消费者pop时,先将free队列pop,如果可以pop,则进行pop并消费,然后将其push进入full队列,如果free队列不可pop为空,则消费者不可pop。

3,核心思想是让full和free队列实际元素数量之和恒定为最大队列长度不变,通过判断一个队列是否为空来判断另一个队列是否为满。

4,主要是我们可能不知道队列最大长度时,无法判断是否满时采用这种方法。

以上是关于caffe数据读取的双阻塞队列说明的主要内容,如果未能解决你的问题,请参考以下文章

# Java 常用代码片段

Java 几种队列区别的简单说明

并发容器2

不要从输入队列套接字中读取数据

CoreData从后台线程读取数据仍然阻塞UI界面的原因及解决

caffe里的blocking_queue.hpp与.cpp干了点什么呢???