c++ 阻塞队列的实现
2016-03-10 21:19
549 查看
#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; }; }
相关文章推荐
- Problem G: C语言习题 输出月份
- NVIDIA Jetson TK1学习与开发(五):helloworld的C版本与C++版本
- Problem F: C语言习题 不等长字符串排序
- C++ 推断进程是否存在
- Problem E: C语言习题 等长字符串排序
- c++使用库函数判断字符是否是数字
- Problem D: C语言习题 字符串比较
- C语言-while循环
- Problem C: C语言习题 字符串长度
- C语言输入比较
- C/C++的头文件引用问题
- 调整数组使奇数全部都位于偶数前面。
- C++第1-2次上机实验
- YTU:C语言习题 n个数逆序
- C++string与int之间的相互转换
- YTU:C语言习题 矩形法求定积分
- 输出斐波那契数列
- C++ new 长度为0的数组
- 计算π的值
- Android NDK的C++ STL开发相关总结