学习笔记:boost spsc队列
来源:互联网 发布:电脑报淘宝店二手手机 编辑:程序博客网 时间:2024/06/06 00:49
#include <boost/thread/thread.hpp>#include <boost/shared_ptr.hpp>#include <boost/lockfree/spsc_queue.hpp>#include <boost/atomic.hpp>#include <boost/bind.hpp>#include <iostream>class Consumer{public: struct Data{ int a,b,c; };Consumer():stoped_(false),counter_(0){}~Consumer(){ stop();}void start(){trd_.reset(new boost::thread( boost::bind(&Consumer::run, this)));}void stop(){ stoped_=true;trd_->join();std::cout << "TOTAL CONSUME "<< counter_ << std::endl;}bool push(Data& d){ return spsc_queue_.push(d);}private:void deal(Data& d){ counter_+=d.c;}void run(){while (!stoped_) {if ( 0==spsc_queue_.consume_all( boost::bind(&Consumer::deal,this,_1)))boost::this_thread::sleep(boost::posix_time::seconds(0)); } spsc_queue_.consume_all( boost::bind(&Consumer::deal,this,_1));}private: boost::lockfree::spsc_queue<Data, boost::lockfree::capacity<1024> , boost::lockfree::fixed_sized<true> > spsc_queue_;bool stoped_;boost::shared_ptr<boost::thread> trd_;int counter_;};int main(int argc, char* argv[]){Consumer consumer; consumer.start();Consumer::Data d;d.c=1;for (int i = 0; i!=10000000; ++i) {while (!consumer.push(d)){ boost::this_thread::sleep(boost::posix_time::seconds(0));} }return 0;}
0 0
- 学习笔记:boost spsc队列
- Boost.Python学习笔记
- Boost学习笔记 BOOST_STATIC_ASSERT
- Boost学习笔记 operators
- Boost.Python 学习笔记
- Boost python 学习笔记
- Boost学习笔记-tokenizer
- Boost学习笔记-bind
- Boost python 学习笔记
- Boost 学习笔记
- Boost.Python学习笔记
- boost exception 学习笔记
- boost uuid 学习笔记
- boost SHA1学习笔记
- boost::lambda学习笔记
- BOOST学习笔记
- Boost Thread学习笔记
- boost bimap 学习笔记
- 3.3.2.1 用模式匹配分解列表
- Median of Two Sorted Arrays
- 初学Redis(3)——用Redis作为Mysql数据库的缓存
- Python内建函数(H)
- hdu 5036 Explosion 2014 ACM/ICPC Asia Regional Beijing Online
- 学习笔记:boost spsc队列
- iOS 的Viewcontroller只支持一个屏幕方向,弹出不同方向,旋转
- im大型分布式实时计费服务器系统架构2.0
- 【最小割】POJ-3469 Dual Core CPU
- BI实施过程中的工具与服务
- winform窗体逻辑
- Sudoku Solver
- 可执行文件ELF的理解
- Leetcode_num9_Binary Tree Inorder Traversal