无锁实现线程间共享数据
2016-10-27 14:39
197 查看
这几天没那么忙,review了一下以前写的一个linux网络库,看得我略微有点纠结,大概流程如下图:
MainThread创建连接fd及处理相关的数据结构,然后加到链表ShareDataList中;
DataHandleThread有一个epoll处理fd的流程,一次处理完之后会去check ShareDataList,如果有数据,就把数据加到epoll中wait,然后清空ShareDataList;
今天突然想到其实可以用pipe实现,以前在windows进程间通信的时候用到过,主要用来传输数据流,但是并没有意识到线程间通信用pipe其实也挺好的,这样就不用加锁了;只不过最好是应用在单线程读--单线程写的情况;说到这种情况,那么ringbuf应该也是适用的,就是要自己实现一个ringbuf类,还是pipe更好用一点。
改造后的流程图:
代码就不贴了,反正也没几行,网上一搜一大片,就这样
MainThread创建连接fd及处理相关的数据结构,然后加到链表ShareDataList中;
DataHandleThread有一个epoll处理fd的流程,一次处理完之后会去check ShareDataList,如果有数据,就把数据加到epoll中wait,然后清空ShareDataList;
今天突然想到其实可以用pipe实现,以前在windows进程间通信的时候用到过,主要用来传输数据流,但是并没有意识到线程间通信用pipe其实也挺好的,这样就不用加锁了;只不过最好是应用在单线程读--单线程写的情况;说到这种情况,那么ringbuf应该也是适用的,就是要自己实现一个ringbuf类,还是pipe更好用一点。
改造后的流程图:
代码就不贴了,反正也没几行,网上一搜一大片,就这样
相关文章推荐
- java线程:单例隐藏ThreadLocal实现线程数据共享
- ThreadLocal实现线程范围内的数据共享
- ThreadLocal类实现线程范围内数据共享
- Python 进程线程之间通信方式(2.1,共享数据实现进程之间通信)
- Python 进程线程之间通信方式(2,共享数据实现进程之间通信)
- java 使用volatile实现线程数据的共享
- 线程共享的环境包括:进程代码段、进程的公有数据(利用这些共享的数据,线程很容易的实现相互之间的通讯)、进程打开的文件描述符、信号的处理器、进程的当前目录和进程用户ID与进程组ID。 进程拥有这
- Java不同线程之间实现数据共享
- ThreadLocal实现:java线程范围内的共享数据,线程外独立
- java-线程-用ThreadLocal类实现线程范围内的数据共享
- 多线程学习--通过单例模式来实现多个线程中的数据共享
- 多线程(三) 实现线程范围内模块之间共享数据及线程间数据独立(ThreadLocal)
- 1005实现一个线程从共享的缓冲区中读数据,另一个线程向共享的缓冲区中写数据
- 多线程(四) 实现线程范围内模块之间共享数据及线程间数据独立(Map集合)
- ThreadLocal实现线程范围内模块之间共享数据及线程间数据独立
- Java基础——ThreadLocal实现线程范围内的数据共享
- 张孝祥实现线程范围内数据共享(学习笔记)
- 实现线程内共享数据(二)
- java线:辛格尔顿隐藏ThreadLocal实现线程数据共享
- java多线程:16、阻塞队列【BlockingQueue】实现线程数据共享的效果