高性能并发队列(C++实现)
来源:互联网 发布:淘宝的淘气值有什么用 编辑:程序博客网 时间:2024/05/22 14:42
算法参考:http://www.parallellabs.com/2010/10/25/practical-concurrent-queue-algorithm/,非常适合生产者-消费者模型。
注意:1、析构函数没有加锁,因为需要同时对head lock和tail lock加锁。不建议在析构不确定的情况下使用。
2、经测试,比加锁的std::list快50%,比加锁的std::queue慢20%。
template <typename T>class concurrent_queue{public:concurrent_queue(){NODE* node = new NODE();node->next = NULL;head_ = node;tail_ = node;}~concurrent_queue(){NODE* node = head_;do{node = erase_(node);}while(node != NULL);}void push(const T& val){NODE* node = new NODE();node->val = val;node->next = NULL;scoped_lock lock(t_lock_);tail_->next = node;tail_ = node;}bool pop(T* val){scoped_lock lock(h_lock_);if(empty_()){return false;}head_ = erase_(head_);*val = head_->val;return true;}private:struct NODE{T val;NODE* next;};private:bool empty_() const{return head_->next == NULL;}NODE* erase_(NODE* node) const{NODE* tmp = node->next;delete node;return tmp;}private:NODE* head_;NODE* tail_;concurrent_lock h_lock_;concurrent_lock t_lock_;};
class concurrent_lock{public:concurrent_lock(){InitializeCriticalSection(&cs_);}~concurrent_lock(){DeleteCriticalSection(&cs_);}void lock(){EnterCriticalSection(&cs_);}void unlock(){LeaveCriticalSection(&cs_);}private:CRITICAL_SECTION cs_;};class scoped_lock{public:scoped_lock(const concurrent_lock& lock) : lock_(lock){const_cast<concurrent_lock&>(lock_).lock();}~scoped_lock(){const_cast<concurrent_lock&>(lock_).unlock();}private:const concurrent_lock& lock_;};
0 0
- 高性能并发队列(C++实现)
- 高性能并发双向队列
- 处理高并发高性能队列-Disruptor
- Netty实现高性能高并发
- 优先级队列--高并发度,高性能
- 高并发,高性能
- 高性能,高并发
- 高性能,高并发
- 高性能高并发
- 并发队列ConcurrentLinkedQueue和阻塞队列LinkedBlockingQueue在入队操作高并发性能比较
- 并发队列ConcurrentLinkedQueue和阻塞队列LinkedBlockingQueue在入队操作高并发性能比较
- 构建高性能服务(二)java高并发锁的3种实现
- 构建高性能服务(二)java高并发锁的3种实现
- MySQL:如何实现高性能高并发的计数器功能(如:网站点击数)
- 实现高性能高并发的计数器功能
- Java异步NIO框架Netty实现高性能高并发
- Java与Netty实现高性能高并发
- 高性能高并发架构的实现要素
- GoF著作中未提到的设计模式(6):Specification
- linux环境下调试一些嵌入式设备时出现Aborted、segmentation fault、卡死的问题
- 游戏中C++调用Java
- 手机通过chrome播放ipcamera视频
- HDOJ 3062 Party
- 高性能并发队列(C++实现)
- 桥接模式
- org.springframework.web.servlet.DispatcherServlet cannot be cast to javax.servle
- 没有注册类 ADOX.CatalogClass.Create
- 请用文明来说服我
- EXP-00056: ORACLE error 6550 encountered报错;
- 利用UIMotionEffect 实现UIAlertView那种随着设备在空间的移动而发生微移
- XML解析
- Tcp/ip学习笔记1_Tcp连接建立、数据传输、连接关闭分析