C++ 的 ConcurrentHashMap

问题描述 投票:0回答:5

是否有用于 C++ 实现的 ConcurrentHashMap 或类似的东西?

我不明白为什么c++中的多线程比Java那么难!

c++ multithreading concurrency
5个回答

4
投票

有一个名为

junction
的新开源库可用,其中包含多个新的并发地图。

https://github.com/preshing/junction

它是 BSD 许可的,因此您可以在任何项目中出于任何目的自由使用源代码。

this博客文章中查找更多详细信息。

感谢作者Jeff


3
投票
Folly 库中的

folly::ConcurrentHashMap。它的接口与 std::unordered_map 非常接近。


1
投票

C++ 中并不真正支持线程,因此标准中没有任何关于线程安全容器的内容。显然人们以前已经做过了。

我认为英特尔的这个东西可能会有所帮助http://www.threadingbuildingblocks.org/

我自己还没有使用过,所以没有保证。

您还可以使用信号量将任何容器包装在您自己的类中,以使其线程安全。

祝你好运。


0
投票

不需要像

folly
这样的重型库或像
tbb
这样的有限库:你自己实现并发哈希表很容易。

我发布了并发哈希集的代码。通过将

std::unordered_set
替换为
std::unordered_map
应该很容易将其转换为哈希映射。请记住,迭代器很容易同时失效,因此您需要像
UpdateValue()
这样的方法来更改并发哈希表的项目。或者,您可以将 hashmap 的值包装到
std::unique_ptr
中,使其始终占据内存中的固定位置。

© www.soinside.com 2019 - 2024. All rights reserved.