| namespace caffe { | |
| template<typename T> | |
| 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<T> queue_; | |
| shared_ptr<sync> sync_; | |
| DISABLE_COPY_AND_ASSIGN(BlockingQueue); | |
| }; | |
| } // namespace caffe | |