在这些条件下,我是否可以使用STL进行线程化?

0 c++ containers stl map

我有一个表格的集合:

map<key, list<object> >
Run Code Online (Sandbox Code Playgroud)

我只在列表的后面插入,有时我从整个地图中读取(但我从不写入地图,除了在初始化时).

据我所知,没有一个STL容器是线程安全的,但我每个键最多只能有一个线程.我是否错过任何假设我会对这种安排相当安全的事情?

Dan*_*ker 7

如果在多线程场景中从未修改过地图,那么你没事.如果每个线程查看自己的列表,那么这是线程私有数据,所以你也没关系.

注意不要尝试使用[]查找键,因为如果地图中不存在键,它将插入(修改).

但是,我很好奇为什么你需要这个结构 - 为什么不将指针/引用或实际的列表对象本身保存在每个线程的堆栈上,因为它对每个线程都是私有的?

(如果不是,那么您需要在列表上进行适当的同步.)

事实上,你说你"从整个地图中读取" - 可能意味着任何随机线程都可能试图遍历任何列表.所以你肯定需要同步列表上的操作.