lock free 之 stack

lock free 之 stack第二个例子(和第一个一样,没加注释,均是消费者需要判断生产者还在生产吗),在实际中,可以考虑使用这个模型,比起我前面写的数据队列来说,用boost::lockfree可以大大减轻工作,这也是今年要努力掌握boost的一个理由#include#include#include#includeboost::atomic_intproducer_count(0);boost::a

大家好,又见面了,我是你们的朋友全栈君。第二个例子(和第一个一样,没加注释,均是消费者需要判断生产者还在生产 吗),在实际中,可以考虑使用这个模型,比起我前面写的数据队列来说,用boost::lockfree可以大大减轻工作,这也是今年要努力掌握boost的一个理由
大笑

#include <boost/thread/thread.hpp>
#include <boost/lockfree/stack.hpp>
#include <iostream>

#include <boost/atomic.hpp>

boost::atomic_int producer_count(0);
boost::atomic_int consumer_count(0);

boost::lockfree::stack<int> stack(128);

const int iterations = 1000000;
const int producer_thread_count = 4;
const int consumer_thread_count = 4;

void producer(void)
{
    for (int i = 0; i != iterations; ++i) {
        int value = ++producer_count;
        while (!stack.push(value))
            ;
    }
}

boost::atomic<bool> done (false);

void consumer(void)
{
    int value;
    while (!done) {
        while (stack.pop(value))
            ++consumer_count;
    }

    while (stack.pop(value))
        ++consumer_count;
}

int main(int argc, char* argv[])
{
    using namespace std;
    cout << "boost::lockfree::stack is ";
    if (!stack.is_lock_free())
        cout << "not ";
    cout << "lockfree" << endl;

    boost::thread_group producer_threads, consumer_threads;

    for (int i = 0; i != producer_thread_count; ++i)
        producer_threads.create_thread(producer);

    for (int i = 0; i != consumer_thread_count; ++i)
        consumer_threads.create_thread(consumer);

    producer_threads.join_all();
    done = true;

    consumer_threads.join_all();

    cout << "produced " << producer_count << " objects." << endl;
    cout << "consumed " << consumer_count << " objects." << endl;
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/161723.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 硬盘加速和磁盘碎片整理软件

    硬盘加速和磁盘碎片整理软件2018/12/12PrimoCache(推荐):1、PrimoCache使用方法自行搜索,官网也有实例。2、PrimoCache的作用类似于傲腾,但是没有傲腾只能加速一个机械硬盘的缺点,PrimoCache可以同时加速多个机械硬盘。3、如果你有多余的内存,你可以开一级缓存,即使你没有固态硬盘也可以体验机械硬盘在开机后的加速。4、如果你有多余的内存和固态硬盘空间,你可以开一级缓…

    2022年6月25日
    49
  • 关于解决token过期失效问题「建议收藏」

    关于解决token过期失效问题「建议收藏」关于解决token过期失效问题,用户对token无感知(实现免登陆)一、先认识下token二、整体思路三、实现步骤1.理清各个文件作用2.路由导航守卫3.封装localStorage方法4.vuex5.封装axios实现请求拦截器和响应拦截器(重点部分)四、小结一、先认识下token二、整体思路三、实现步骤1.理清各个文件作用2.路由导航守卫设置用户有无token访问主页,并且登录成功回到目标页importVuefrom’vue’importVueRouterfrom’v

    2022年9月12日
    0
  • tomcat日志详解[通俗易懂]

    tomcat日志详解[通俗易懂]文章目录tomcat日志配置tomcat日志文件详解catalina.outcatalina.YYYY-MM-DD.loglocalhost.YYYY-MM-DD.loglocalhost_access_log.YYYY-MM-DD.txthost-manager.YYYY-MM-DD.logmanager.YYYY-MM-DD.log访问日志详细配置tomcat日志文件切割tomcat日志配…

    2022年6月20日
    40
  • 计算机网络体系结构

    计算机网络体系结构计算机网络体系结构认识一下什么是计算机网络体系结构计算机网络是一个非常复杂、庞大的系统,涉及到很多组成部分。包括主机、路由器、各种链路、应用、协议、硬件、软件……等。那么是否存在一种体系结构可以

    2022年7月4日
    18
  • quartz定时任务不执行(任务统筹策略)

    由于某种原因,例如应用停掉,导致定时任务错过了本该执行的时间点,这就是定时任务过期。对于过期的定时任务,我们需要基于某种策略对其进行处理。过期策略在Trigger接口中定义了两种过期策略,publicstaticfinalintMISFIRE_INSTRUCTION_SMART_POLICY=0;publicstaticfinalintMISF…

    2022年4月11日
    1.5K
  • targetSdk27 FileProvider 摄像和照相[通俗易懂]

    targetSdk27 FileProvider 摄像和照相[通俗易懂]推荐Github开源项目SelectImgAsWechath:https://github.com/SCCXYS/SelectImgAsWechat参考地址:AndroidFileProvider详细解析和踩坑指南开始以下,调用相机的代码出自开源项目SelectImgAsWechath。权限<!–拍照–><uses-permissionandroid:name=”android.permission.CAMERA”/><!

    2022年7月21日
    14

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号