是否有用于 C++ 实现的 ConcurrentHashMap 或类似的东西?
我不明白为什么c++中的多线程比Java那么难!
有一个名为
junction
的新开源库可用,其中包含多个新的并发地图。
https://github.com/preshing/junction
它是 BSD 许可的,因此您可以在任何项目中出于任何目的自由使用源代码。
在this博客文章中查找更多详细信息。
感谢作者Jeff。
folly::ConcurrentHashMap。它的接口与 std::unordered_map 非常接近。
C++ 中并不真正支持线程,因此标准中没有任何关于线程安全容器的内容。显然人们以前已经做过了。
我认为英特尔的这个东西可能会有所帮助http://www.threadingbuildingblocks.org/
我自己还没有使用过,所以没有保证。
您还可以使用信号量将任何容器包装在您自己的类中,以使其线程安全。
祝你好运。
不需要像
folly
这样的重型库或像tbb
这样的有限库:你自己实现并发哈希表很容易。
我发布了并发哈希集的代码。通过将
std::unordered_set
替换为 std::unordered_map
应该很容易将其转换为哈希映射。请记住,迭代器很容易同时失效,因此您需要像 UpdateValue()
这样的方法来更改并发哈希表的项目。或者,您可以将 hashmap 的值包装到 std::unique_ptr
中,使其始终占据内存中的固定位置。