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数据读取的双阻塞队列说明的主要内容,如果未能解决你的问题,请参考以下文章