c++ 阻塞队列的实现

来源:互联网 发布:好用的隔离霜 知乎 编辑:程序博客网 时间:2024/05/20 05:23
#include <memory>#include <mutex>#include <condition_variable>#include <queue>#include <chrono>namespace WPAYRTL{template<class T>class BlockingQueue{public:BlockingQueue() {}~BlockingQueue() {}void offer(std::shared_ptr<T> &e){{std::unique_lock<std::mutex> lockGard(_myMutex);_queue.push(e);}_myVariable.notify_all();}std::shared_ptr<T> take(){std::unique_lock<std::mutex> lockGard(_myMutex);_myVariable.wait(lockGard, [&] {return _queue.size() > 0;});std::shared_ptr<T> e = _queue.front();_queue.pop();return e;}std::shared_ptr<T>take(std::chrono::milliseconds& time){std::unique_lock<std::mutex> lockGard(_myMutex);bool result = _myVariable.wait_for(lockGard, time, [&] {return _queue.size() > 0;});if (!result){return nullptr;}std::shared_ptr<T> e = _queue.front();_queue.pop();return e;}private:std::queue<std::shared_ptr<T>> _queue;std::mutex _myMutex;std::condition_variable _myVariable;};}

0 0
原创粉丝点击