【问题标题】:C++ 11 equivalent of java.util.ConcurrentHashMapC++ 11 等效于 java.util.ConcurrentHashMap
【发布时间】:2013-04-20 09:48:03
【问题描述】:

我发现自己一直在编写 Mutex 代码,以便同步对 std::unordered_map 和其他容器的读/写访问,这样我就可以像使用 java.util.concurrent 容器一样使用它们。我正要开始编写一个包装器来封装 Mutex,但我宁愿使用一个经过良好测试的库,这样我就不会塞满线程。

有这样的图书馆吗?

【问题讨论】:

  • facebook 愚蠢,它提供了一个 AtomicHashMap。 github.com/facebook/folly?source=cr
  • 嗯,最好在有映射的类中使用互斥锁,并使用共享互斥锁保护读写,而不是包装映射。
  • Facebook 愚蠢不允许您删除地图元素/释放内存

标签: c++11 map concurrency stl containers


【解决方案1】:

英特尔制作了一个名为Threading Building Blocks 的库,其中有两个这样的东西:concurrent_hash_map 和 concurrent_unordered_map。它们的characteristics 略有不同,但其中一种可能适合您的需求。

【讨论】:

  • 谢谢,看起来不错。不幸的是,它是 GPL,与我正在从事的商业项目不兼容。
  • 其实不然——查看threadingbuildingblocks.org/faq/10 - TBB 是双重许可的,所以如果您需要或想要商业许可而不是 GPL,它是可用的。我强烈推荐它。
  • 它们并不完全相同。与 java 不同,TBB 映射不支持并发擦除。
【解决方案2】:

Folly 有一个 AtomicHashmap 实现。主要限制是您只能使用int32int64 键。检查文档here(特别是限制部分)

【讨论】:

    猜你喜欢
    • 2015-03-24
    • 2021-08-20
    • 2018-10-11
    • 2014-06-18
    • 1970-01-01
    • 2011-08-14
    • 2013-05-18
    • 1970-01-01
    • 2017-08-02
    相关资源
    最近更新 更多