C: 无锁内存分配库

9

有人对C/C++的无锁内存分配器有过好的经验吗?

我已经研究了boost和libcds,但我不确定该使用哪个库。

背景:我一直在研究“无锁、无等待、非阻塞、动态完美哈希、可扩展、并发哈希表”,是的,我知道这听起来很自负,但这就是它的名字。

无论如何,我准备开始多线程测试它,并且需要找到最佳的内存分配方式,当新节点添加时(以及当我需要分配指针数组时)。

那么,有人对无锁内存分配有什么好的经验吗?


1
无等待不就意味着无锁,无锁不就意味着非阻塞,非阻塞不就意味着并发吗?有点多余了... - GManNickG
我知道,但我的研究教授喜欢触及所有的关键词。 - Steven Feldman
3
您的愿望清单中漏掉了"NUMA感知"。如果您还需要并发性,所有基本的分配器实现在NUMA硬件上都表现不佳。 - Steve-o
投票关闭,建议使用工具。 - Ciro Santilli OurBigBook.com
3个回答

5
这个实现看起来很不错,漂亮的图表证明了这一点:

http://locklessinc.com/

自2011年11月14日以来,它已经是开源GPL 3.0版。 :)

他们发布了性能基准测试代码,这很好,因为我想研究一下比标准time.h更好的计时工具。 - Steven Feldman
@Feldman,你可以从图表中看到这些选择:来自Google的tcmalloc(曾用名jemalloc),以及glibc的默认分配器,这些天非常好。 - Steve-o
2
再一次,Hoard彻底失败了。我已经看到它被推荐了很多次,但是每次我遇到的基准测试都将jemalloctcmalloc远远地抛在了后面。 - Matthieu M.

2

还有streamflow。我自己没有使用过它,只是在阅读一些出版物时遇到了它。


0

为什么不尝试使用tbb的分配器呢?虽然我不确定它有多“无锁”,但我怀疑你不会找到一个真正的无锁分配器,至少没有像tcmalloc那样可以跨线程/核心工作的。

*几个月前我尝试构建一个真正的无锁分配器,但是从我的角度来看,使它无锁有一些缺点。我不太喜欢nedmalloc那样的TLS arena。最终我得到了一种混合型分配器,只有在chunk-bin为空时才会锁定。


有一种完全无锁的Hoard版本。 - user82238

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接