您的位置:首页 > 其它

无锁实现线程间共享数据

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更好用一点。

改造后的流程图:



代码就不贴了,反正也没几行,网上一搜一大片,就这样
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  无锁 多线程 共享
相关文章推荐