这几天没那么忙,review了一下以前写的一个linux网络库,看得我略微有点纠结,大概流程如下图:

MainThread创建连接fd及处理相关的数据结构,然后加到链表ShareDataList中;
        DataHandleThread有一个epoll处理fd的流程,一次处理完之后会去check ShareDataList,如果有数据,就把数据加到epoll中wait,然后清空ShareDataList;

今天突然想到其实可以用pipe实现,以前在windows进程间通信的时候用到过,主要用来传输数据流,但是并没有意识到线程间通信用pipe其实也挺好的,这样就不用加锁了;只不过最好是应用在单线程读--单线程写的情况;说到这种情况,那么ringbuf应该也是适用的,就是要自己实现一个ringbuf类,还是pipe更好用一点。

改造后的流程图:

代码就不贴了,反正也没几行,网上一搜一大片,就这样

无锁实现线程间共享数据相关推荐

  1. C++线程间共享数据

    通常我们使用锁保护线程间共享数据,这也是最基本的方式. 当访问共享数据前,使用互斥量将相关数据锁住,再当访问结束后,再将数据解锁.线程库需要保证,当一个线程使用特定互斥量锁住共享数据时,其他的线程想要 ...

  2. C++并发编程线程间共享数据std::future和sd::promise

    线程间共享数据 使用互斥锁实现线程间共享数据 为了避免死锁可以考虑std::lock()或者boost::shared_mutex 要尽量保护更少的数据 同步并发操作 C++标准库提供了一些工具 可以 ...

  3. Disruptor 线程间共享数据无需竞争

    队列的作用是缓冲 缓冲到 队列的空间里.. 线程间共享数据无需竞争 原文 地址  作者  Trisha   译者:李同杰 LMAX Disruptor 是一个开源的并发框架,并获得2011 Duke' ...

  4. java 多线程共享变量两类问题_Java并发基础09. 多个线程间共享数据问题

    先看一个多线程间共享数据的问题: 设计四个线程,其中两个线程每次对data增加1,另外两个线程每次对data减少1. 从问题来看,很明显涉及到了线程间通数据的共享,四个线程共享一个 data,共同操作 ...

  5. java 多线程共享数据_Java多线程学习:多个线程间共享数据

    多个线程访问共享对象和数据的方式有两种情况: 1.每个线程执行的代码相同,例如,卖票:多个窗口同时卖这100张票,这100张票需要多个线程共享. 2.每个线程执行的代码不同,例如:设计四个线程,其中两 ...

  6. java 多个线程共享数据_【java并发】多个线程间共享数据

    先看1个多线程间同享数据的问题: 设计4个线程,其中两个线程每次对data增加1,另外两个线程每次对data减少1. 从问题来看,很明显触及到了线程间通数据的同享,4个线程同享1个data,共同操作1 ...

  7. 《C++并发编程实战》读书笔记——chapter 3_线程间共享数据

    更多的阅读笔记,及示例代码见 Github https://github.com/anlongstory/C-_Concurrency_in_Action_reading_notes 本章主要内容: ...

  8. Linux系统编程---13(线程控制函数,创建线程,循环创建多个线程,线程间共享全局变量)

    线程控制 操作系统并没有提供创建线程的系统调用接口,因此大佬们封装了一个线程的接口库实现线程控制.意为着用户创建线程都使用的是库函数(所以有时候我们说创建的线程是一个用户态线程,但是在内核中对应有一个 ...

  9. 常用并发工具类(锁和线程间通信工具类)

    常用并发工具类总结 JUC 下的常用并发工具类(锁和线程间通信工具类),主要包括 ReentrantLock.ReentrantReadWriteLock.CountDownLatch.CyclicB ...

最新文章

  1. Python用selenium获取Cookie并用于登录。
  2. php xcat createadmin,php xcat update升级后出错,不知怎么弄
  3. centos下cmake安装
  4. element子组件中的校验_Salesforce LWC学习(十六) Validity 在form中的使用浅谈
  5. 【优化调度】基于matlab粒子群算法求解水火电调度优化问题【含Matlab源码 1181期】
  6. 【读书笔记《Android游戏编程之从零开始》】1.Android 平台简介与环境搭建
  7. Java封装代码年龄性别姓名_Java生成随机姓名、性别和年龄的实现示例
  8. 看完这篇解决你99%的运维安全陋习,快别踩坑了!
  9. FCC拆解诺基亚808 PureView 内部细节全曝光
  10. 漫谈程序员系列 薪资,你是我不能言说的伤
  11. top 100 percent
  12. java 矩阵求逆_详解用java描述矩阵求逆的算法
  13. ubuntu 20.04 ROS 环境下 使用 velodyne
  14. [编程语言的对比式学习] C++ vs C#
  15. 工业物联网创新方案亮相2018云栖大会
  16. 通俗地理解信号与系统中的卷积
  17. php使用eval上传文件,PHP一句话实现单个文件批量上传?
  18. 最详细的***教程 下
  19. jquery.orgcharts插件的使用
  20. 账号服务器异常,知乎服务器出现异常:用户账号信息遭泄露

热门文章

  1. 华硕 N53S 拆机换屏
  2. linux mint安装金山快盘
  3. 19.2 NESMA 唯一和非唯一搜索条件的组合案例分析
  4. 操作系统中用户态和内核态(系统态)是什么?用户态如何变成内核态?
  5. 靴子落地,火山引擎官宣进军云市场
  6. 解决.msi打不开问题
  7. CICD详解(十四)——Gitlab忘记密码恢复
  8. 个人站——联系我页面设计
  9. 第十六讲 java进阶-API
  10. 一文了解国内边缘计算玩家动态