首页 > 其他 > 详细

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

时间:2017-08-05 23:18:02      阅读:354      评论:0      收藏:0      [点我收藏+]

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数据读取的双阻塞队列说明

原文:http://www.cnblogs.com/tomsonsgs/p/7291844.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!