一个Wait-Free MPMC队列的实现

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

知乎原文:一个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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值