首页 > 解决方案 > 向 std::map 或 std::unordered_map 插入太多项目时的奇怪行为

问题描述

我正在研究点云,并std::map<int, std::vector<int>>用于​​对云进行下采样。地图中的键保存空间索引,向量保存点的 id。从这张地图中,我提取了一些要处理的点,并且该处理是使用多线程完成的(不是带有地图的部分)。此时地图已经超出范围。然而,当我的云太大并且下采样率太低时,我会得到一个非常奇怪的行为。即使我使用了所有逻辑线程,我的 cpu 使用率也下降到 60-70%。当我在没有地图的情况下进行下采样(通过简单地跳过点)时,我没有遇到这个问题。我检查了所有线程都在运行,并且我的应用程序没有互斥锁,它们只能从云中读取,这是一个vtkUnstructuredGrid线程安全的只读操作。我不明白为什么会发生这样的事情。

是否会发生此问题,map::max_size()因为当我减小地图的大小时,我没有任何问题。另外为什么它会在我的多线程部分引起问题?我的问题是插入元素来映射不仅仅是max_size导致某种未定义的行为吗?提前致谢。

标签: c++multithreadingstlvtk

解决方案


推荐阅读