std::map的线程安全替代方案
thread-safe alternative for std::map?
我有一个并行循环和对std::map
的写访问。我想同时访问地图的不同部分,即我想访问地图[a]和地图[b]以获得不同的a,b。然而,当我发现这是不可能的时,我想知道是否有一个好的替代方案,或者如何以不同的方式实现这一点!
我可能错了,但我相信,只要不接触相同的元素,将现有元素修改到地图是安全的(因为这不会修改地图的底层结构)。因此,如果提前插入map[a]
和map[b]
,那么单独的线程应该能够修改这些现有元素。
也就是说,只使用普通的同步技术(如互斥锁)来保护对映射的访问可能更干净、更安全。
完全有可能分别突变map[a]
和map[b]
,只要你不突变下属的map
。
如果希望同时更改关联容器,请从PPL或TBB中检出concurrent_unordered_map
。
如果可能的话,您可以尝试为每个工作者提供自己的映射副本,然后合并结果。这样就根本不需要锁定。
相关文章:
- 从不同线程使用int64的不同字节安全吗
- 运行同一解决方案的另一个项目的项目
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- Project Euler问题4的错误解决方案
- 虚拟决赛作为安全
- 获取日期异步信号安全吗?如果在信号处理程序中使用,它会导致死锁吗
- 如何将元素添加到数组的线程安全函数?
- C++中的线程安全删除
- 通过网络、跨平台传递std::变体是否安全
- 计算每个节点的树高,帮助我解释这个代码解决方案
- EOF有更安全的替代方案吗?它在我的情况下不起作用
- 对于 ~95% 写入/5% 读取线程安全的无序列图,有没有一个简单的解决方案?
- vtkUnstructuredGrid->GetPoint() 的线程安全只读替代方案
- 我可以使用模板作为多态处理数组的安全解决方案
- 安全复制对象的替代方案
- std::map的线程安全替代方案
- 在这种情况下,这是最优雅/最安全/推荐的解决方案吗?
- c++:跨平台且安全的系统(…)的替代方案是什么?
- 为什么没有unique_ptr::operator*()的安全替代方案?
- 黑客攻击线程安全是"最佳"行动方案吗?