#ifndef CAFFE_UTIL_BLOCKING_QUEUE_HPP_ #define CAFFE_UTIL_BLOCKING_QUEUE_HPP_ #include #include namespace caffe { template class BlockingQueue { public: explicit BlockingQueue(); void push(const T& t); bool try_pop(T* t); // This logs a message if the threads needs to be blocked // useful for detecting e.g. when data feeding is too slow T pop(const string& log_on_wait = ""); bool try_peek(T* t); // Return element without removing it T peek(); size_t size() const; protected: /** Move synchronization fields out instead of including boost/thread.hpp to avoid a boost/NVCC issues (#1009, #1010) on OSX. Also fails on Linux CUDA 7.0.18. */ class sync; std::queue queue_; shared_ptr sync_; DISABLE_COPY_AND_ASSIGN(BlockingQueue); }; } // namespace caffe #endif