无锁实现线程间共享数据

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

无锁实现线程间共享数据_第1张图片

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

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

        改造后的流程图:

无锁实现线程间共享数据_第2张图片

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

你可能感兴趣的:(C++)