插入独立键时的 C++ unordered_map 线程安全性

问题描述 投票:0回答:1

C++ 容器线程安全指南,位于 http://en.cppreference.com/w/cpp/container#Thread_safety

  • 同一个容器中的不同元素可以被不同线程并发修改

所以我的问题是,假设我有一个

unordered_map<MyKeyClass, MyValueClass> results
,我有几个线程同时运行,并在完成后用
<unique_key, some_value>
填充此地图。保证每个线程返回一个唯一的MyKeyClass。现在这是否意味着我可以安全地同时将值插入到结果中?

如果是,那就回答了我的问题。

如果不是,那么我在生成线程之前插入 怎么样,然后就不会有并发插入,只是修改值,如果我理解正确的话应该没问题?

c++ multithreading concurrency thread-safety
1个回答
1
投票

现在这是否意味着我可以安全地同时将值插入到结果中?

不。 A

std::unordered_map
本质上不是线程安全的。如果不添加同步,您无法从不同线程修改它。

可以在不修改容器本身的情况下修改容器中的元素。

如果不是,那么我在生成线程之前插入 怎么样,然后就不会有并发插入,只是修改值,如果我理解正确的话应该没问题?

是的。你引用的这句话是关于修改容器中的元素。它不是将元素插入到容器中。您不能同时插入但修改元素。

© www.soinside.com 2019 - 2024. All rights reserved.