boost::lockfree::spsc_queue
2024-09-04 12:13:04
#include <boost/thread/thread.hpp>
#include <boost/lockfree/spsc_queue.hpp>
#include <iostream> #include <boost/atomic.hpp> int producer_count = ;
boost::atomic_int consumer_count (); boost::lockfree::spsc_queue<int, boost::lockfree::capacity<> > spsc_queue;//但生产者但消费者队列,后面是指定其容量大小 const int iterations = ; void producer(void)
{
for (int i = ; i != iterations; ++i) {
int value = ++producer_count;
while (!spsc_queue.push(value))
;
}
} boost::atomic<bool> done (false); void consumer(void)
{
int value;
while (!done) {
while (spsc_queue.pop(value))
++consumer_count;
} while (spsc_queue.pop(value))
++consumer_count;
} int main(int argc, char* argv[])
{
using namespace std;
cout << "boost::lockfree::queue is ";
if (!spsc_queue.is_lock_free())
cout << "not ";
cout << "lockfree" << endl; boost::thread producer_thread(producer);//单生产者
boost::thread consumer_thread(consumer);//单消费者 producer_thread.join();
done = true;
consumer_thread.join(); cout << "produced " << producer_count << " objects." << endl;
cout << "consumed " << consumer_count << " objects." << endl;
getchar();
}
其实只要知道其实一种无锁队列是一种单生产者,单消费者的模式。
最新文章
- java反射 之 反射基础
- SASS+COMPASS 自适应 学习笔记
- 【转】 NGUI 监听按钮除OnClick外其他事件的方法,附简易改编的UIButton类
- 《量化投资:以MATLAB为工具》连载(1)基础篇-N分钟学会MATLAB(上)
- 介绍开源的.net通信框架NetworkComms框架 源码分析(二十三 )TCPConnection
- Activity之间传递参数(二)
- firefox浏览器不能使用window.close的解决方案
- POJ 3373 Changing Digits(DP)
- iOS开发之详解正则表达式
- delphi中使用webbrowser提交表单
- MATLAB中的函数的归总
- WCF扩展之实现ZeroMQ绑定和protocolBuffer消息编码(二)实现IRequestChannel(2016-03-15 12:35)
- 问题(bug)确实不在代码逻辑上面,往往是配置、权限或者业务逻辑之外的地方(转)
- redis beforesleep
- Java-判断一个数是不是素数
- 深入C#.NET数据类型
- Mysql之数据类型(胖胖老师)
- Cocos2D:塔防游戏制作之旅(九)
- CSS iconfont阿里巴巴矢量图库在开发中实战使用
- js查找、自组织数据
热门文章
- netty handlers模式
- ILockBytes Windows Mobile 6.5
- [Javascript] Write a Generator Function to Generate the Alphabet / Numbers
- struts2入门示例(hello world)
- js 队列和事件循环
- PL/SQL 异常错误处理
- 64位WinRAR5.0破解
- 关于struts、spring 和 hibernate的说明
- 【转载】Js获取当前日期时间及其它操作
- __attribute__系列之cleanup