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

thread-safe alternative for std::map?

本文关键字:方案 安全 线程 map std      更新时间:2023-10-16

我有一个并行循环和对std::map的写访问。我想同时访问地图的不同部分,即我想访问地图[a]和地图[b]以获得不同的a,b。然而,当我发现这是不可能的时,我想知道是否有一个好的替代方案,或者如何以不同的方式实现这一点!

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

也就是说,只使用普通的同步技术(如互斥锁)来保护对映射的访问可能更干净、更安全。

完全有可能分别突变map[a]map[b],只要你不突变下属的map

如果希望同时更改关联容器,请从PPL或TBB中检出concurrent_unordered_map

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