知乎原文:一个Wait-Free MPMC队列的实现
昨天在wait-free是指什么的评论中,我和朱元兄对wait-free的MPMC(多生产者多消费者)队列进行了一番探讨,也激发了我对已有的wait-free思路进行更深入的挖掘,结果发现MPMC队列有可能做到完全wait-free。于是,本着"shut up and show me the code"的原则,我尝试实现了一个MPMC队列,经过简单的测试发现一切符合预期,然后就开源了。
项目链接是WFMPMC(Wait-Free MPMC),是只有一个头文件的C++11模板类,用户可以通过模板参数指定元素类型和队列大小,因此是一个bounded队列。除了wait-free的特性外,WFMPMC还是zero-copy的,甚至可以放入共享内存来实现Linux中的IPC。
下面简单介绍下WFMPMC的用法:一次入队或出队操作需要依次调用3个接口函数,当然这些函数都是wait-free的。拿writer来说(reader类似),用户需要调用getWriteIdx(), getWritable(idx), commitWrite(idx)这三个函数,详见项目链接。
一个具体的代码示例:
WFMPMC<int, 8> q;
// write integer 123 into queue
auto idx = q.getWriteIdx();
int* data;

本文介绍了作者实现的一个C++11模板类Wait-Free MPMC队列,该队列不仅wait-free,而且是zero-copy的,适用于Linux中的IPC。队列操作包括wait-free的三个接口函数,同时提供了简化版的懒人接口和Try版本API。性能测试显示,单线程操作耗时约53 cycle,进程间通信延时约200 cycle。然而,该队列目前并不具备崩溃安全性。
最低0.47元/天 解锁文章
1560

被折叠的 条评论
为什么被折叠?



