知乎原文:一个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