无锁实现线程间共享数据
这几天没那么忙,review了一下以前写的一个linux网络库,看得我略微有点纠结,大概流程如下图:
MainThread创建连接fd及处理相关的数据结构,然后加到链表ShareDataList中;
DataHandleThread有一个epoll处理fd的流程,一次处理完之后会去check ShareDataList,如果有数据,就把数据加到epoll中wait,然后清空ShareDataList;
今天突然想到其实可以用pipe实现,以前在windows进程间通信的时候用到过,主要用来传输数据流,但是并没有意识到线程间通信用pipe其实也挺好的,这样就不用加锁了;只不过最好是应用在单线程读--单线程写的情况;说到这种情况,那么ringbuf应该也是适用的,就是要自己实现一个ringbuf类,还是pipe更好用一点。
改造后的流程图:
代码就不贴了,反正也没几行,网上一搜一大片,就这样
无锁实现线程间共享数据相关推荐
- C++线程间共享数据
通常我们使用锁保护线程间共享数据,这也是最基本的方式. 当访问共享数据前,使用互斥量将相关数据锁住,再当访问结束后,再将数据解锁.线程库需要保证,当一个线程使用特定互斥量锁住共享数据时,其他的线程想要 ...
- C++并发编程线程间共享数据std::future和sd::promise
线程间共享数据 使用互斥锁实现线程间共享数据 为了避免死锁可以考虑std::lock()或者boost::shared_mutex 要尽量保护更少的数据 同步并发操作 C++标准库提供了一些工具 可以 ...
- Disruptor 线程间共享数据无需竞争
队列的作用是缓冲 缓冲到 队列的空间里.. 线程间共享数据无需竞争 原文 地址 作者 Trisha 译者:李同杰 LMAX Disruptor 是一个开源的并发框架,并获得2011 Duke' ...
- java 多线程共享变量两类问题_Java并发基础09. 多个线程间共享数据问题
先看一个多线程间共享数据的问题: 设计四个线程,其中两个线程每次对data增加1,另外两个线程每次对data减少1. 从问题来看,很明显涉及到了线程间通数据的共享,四个线程共享一个 data,共同操作 ...
- java 多线程共享数据_Java多线程学习:多个线程间共享数据
多个线程访问共享对象和数据的方式有两种情况: 1.每个线程执行的代码相同,例如,卖票:多个窗口同时卖这100张票,这100张票需要多个线程共享. 2.每个线程执行的代码不同,例如:设计四个线程,其中两 ...
- java 多个线程共享数据_【java并发】多个线程间共享数据
先看1个多线程间同享数据的问题: 设计4个线程,其中两个线程每次对data增加1,另外两个线程每次对data减少1. 从问题来看,很明显触及到了线程间通数据的同享,4个线程同享1个data,共同操作1 ...
- 《C++并发编程实战》读书笔记——chapter 3_线程间共享数据
更多的阅读笔记,及示例代码见 Github https://github.com/anlongstory/C-_Concurrency_in_Action_reading_notes 本章主要内容: ...
- Linux系统编程---13(线程控制函数,创建线程,循环创建多个线程,线程间共享全局变量)
线程控制 操作系统并没有提供创建线程的系统调用接口,因此大佬们封装了一个线程的接口库实现线程控制.意为着用户创建线程都使用的是库函数(所以有时候我们说创建的线程是一个用户态线程,但是在内核中对应有一个 ...
- 常用并发工具类(锁和线程间通信工具类)
常用并发工具类总结 JUC 下的常用并发工具类(锁和线程间通信工具类),主要包括 ReentrantLock.ReentrantReadWriteLock.CountDownLatch.CyclicB ...
最新文章
- Python用selenium获取Cookie并用于登录。
- php xcat createadmin,php xcat update升级后出错,不知怎么弄
- centos下cmake安装
- element子组件中的校验_Salesforce LWC学习(十六) Validity 在form中的使用浅谈
- 【优化调度】基于matlab粒子群算法求解水火电调度优化问题【含Matlab源码 1181期】
- 【读书笔记《Android游戏编程之从零开始》】1.Android 平台简介与环境搭建
- Java封装代码年龄性别姓名_Java生成随机姓名、性别和年龄的实现示例
- 看完这篇解决你99%的运维安全陋习,快别踩坑了!
- FCC拆解诺基亚808 PureView 内部细节全曝光
- 漫谈程序员系列 薪资,你是我不能言说的伤
- top 100 percent
- java 矩阵求逆_详解用java描述矩阵求逆的算法
- ubuntu 20.04 ROS 环境下 使用 velodyne
- [编程语言的对比式学习] C++ vs C#
- 工业物联网创新方案亮相2018云栖大会
- 通俗地理解信号与系统中的卷积
- php使用eval上传文件,PHP一句话实现单个文件批量上传?
- 最详细的***教程 下
- jquery.orgcharts插件的使用
- 账号服务器异常,知乎服务器出现异常:用户账号信息遭泄露