【问题标题】:C: Lock-Free Memory Allocation LibraryC:无锁内存分配库
【发布时间】:2011-03-25 04:28:36
【问题描述】:

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

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

背景,我一直在研究“无锁、无等待、无阻塞、动态完美哈希、可扩展、并发哈希表” *是的,我知道这听起来很自命不凡,但这就是所谓的。

无论如何,我已经准备好开始多线程测试了,当添加新节点时,我需要找出设置内存分配的最佳方法。 (以及当我需要分配指针数组时)

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

【问题讨论】:

  • 不等待不意味着无锁,无锁意味着非阻塞,非阻塞意味着并发吗?有点多余……
  • 我知道,但我的研究教授喜欢点击所有的关键词。
  • 您错过了愿望清单中的 NUMA-aware。如果您还需要并发性,所有基本的分配器实现在 NUMA 硬件上都不会很好。
  • 投票结束作为工具记录

标签: c++ c memory-management lock-free


【解决方案1】:

漂亮的图表表明这个实现很好:

http://locklessinc.com/

自 2011 年 11 月 14 日起,它是开源 GPL 3.0 :)

【讨论】:

  • 他们在那里发布了性能基准测试代码,这很好,因为我想研究一个比标准 time.h 更好的计时工具
  • @Feldman,您可以从图表中看到替代方案:tcmalloc 来自 Google nee jemalloc,以及 glibc 的默认分配器,这些天非常好。
  • Hoard 又一次惨败。我已经多次看到它推荐了很多次,但我遇到的每一个基准测试都远远领先于 jemalloctcmalloc
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    为什么不试试tbb 的分配器呢?不确定它有多“无锁”,尽管我怀疑你会找到一个真正的无锁分配器*,至少一个可以跨线程/内核工作的分配器(如tcmalloc

    *几个月前我尝试实际构建一个,但使其无锁有一些缺点,至少从我的角度来看是这样。我不太喜欢 nedmalloc 那样的 TLS 竞技场。我最终得到了一个混合型分配器,它仅在块箱为空时锁定。

    【讨论】:

    • Hoard 有一个完全无锁的版本。
    猜你喜欢
    • 2023-03-05
    • 2010-10-24
    • 2019-12-07
    • 2015-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多