C++11 线程安全的BlockingQueue实现
2016-09-20 22:53
441 查看
参考了muduo的BlockingQueue的实现,用C++11改写:
#ifndef _BLOCKINGQUEUE_H_ #define _BLOCKINGQUEUE_H_ #include <mutex> #include <condition_variable> #include <deque> #include <assert.h> template <typename T> class BlockingQueue { public: using MutexLockGuard = std::lock_guard<std::mutex>; BlockingQueue() : _mutex(), _notEmpty(), _queue() { } BlockingQueue(const BlockingQueue &) = delete; BlockingQueue& operator=(const BlockingQueue &) = delete; void put(const T &x) { { MutexLockGuard lock(_mutex); _queue.push_back(x); } _notEmpty.notify_one(); } void put(T &&x) { { MutexLockGuard lock(_mutex); _queue.push_back(std::move(x)); } _notEmpty.notify_one(); } T take() { std::unique_lock<std::mutex> lock(_mutex); _notEmpty.wait(lock, [this]{ return !this->_queue.empty(); }); assert(!_queue.empty()); T front(std::move(_queue.front())); _queue.pop_front(); return front; } size_t size() const { MutexLockGuard lock(_mutex); return _queue.size(); } private: mutable std::mutex _mutex; std::condition_variable _notEmpty; std::deque<T> _queue; }; #endif // _BLOCKINGQUEUE_H_
相关文章推荐
- 利用c++11实现线程安全的单例类
- 用C++实现单例模式3——如何在不使用锁和C++11的情况下,用C++实现线程安全的Singleton
- c++11 线程安全的队列实现
- C++11 使用 unique_lock,lock_guard,condition_variable, lambda表达式实现线程安全队列
- 线程安全的C++的Singleton实现
- Winform中使用委托实现跨线程安全调用控件
- 一个C++的BlockingQueue实现
- LinkedBlockingQueue是线程安全的,不信看这儿
- 对改善Dictionary时间性能的思考及一个线程安全的Dictionary实现
- ACE 中线程安全的单间模式的实现
- 用BlockingQueue实现一个简单的生产者-消费者模型
- 实现线程安全的方法是
- Map线程安全几种实现方法
- Map线程安全几种实现方法
- C++11 下使用 Boost.Serialization 库实现智能指针的序列化
- ThreadPoolExecutor使用和思考(上)-线程池大小设置与BlockingQueue的三种实现区别
- 生产者,消费者的BlockingQueue实现
- 线程安全的Singleton模式的Java实现
- 微软的STL容器类实现是线程安全的么?
- ThreadPoolExecutor使用和思考(上)-线程池大小设置与BlockingQueue的三种实现区别