std :: map的线程安全替代方案?

时间:2012-09-05 22:30:53

标签: c++ thread-safety stdmap

我有一个parallized循环和对std::map的写访问权限。我想同时对地图的不同部分,即我想访问地图[a]和地图[b]为a,b不同。我发现这是不可能的,但我想知道,如果有一个好的选择或如何以不同的方式实现这一点!

3 个答案:

答案 0 :(得分:1)

我可能错了,但我相信只要您没有触及相同的元素(因为这不会修改地图的底层结构),将现有元素修改为地图是安全的。因此,如果您提前插入map[a]map[b],则您的单独线程应该能够修改这些现有元素。

也就是说,使用普通同步技术(如互斥锁)保护对地图的访问权限可能更干净,更安全。

答案 1 :(得分:0)

只要你不改变下划线map[a],就可以分别改变map[b]map

如果您希望同时改变关联容器,请从PPL或TBB中查看concurrent_unordered_map

答案 2 :(得分:0)

如果可能,您可以尝试为每个工作人员提供自己的地图副本,然后合并结果。这样就根本不需要锁定。