只写共享 std::unordered_map 线程安全吗?

Is write-only to a shared std::unordered_map thread safe?

假设我有一个已初始化但为空的 std::unordered_map,以及两个将填充它的并发线程。这两个线程只会写入映射,在这两个线程完成之前不会从映射中读取任何内容。

此外,两个线程永远不会对映射中的相同键进行操作。例如,假设线程 1 将填充键 "A" 到 "M",而线程 2 将同时填充键 "N" 到 "Z"。

这个线程安全吗?

在我当前的实现中,我有 8 个线程以上述方式写入单个互斥 std::unordered_map。互斥锁显然会减慢进程(填充了将近 10,000 个键),所以我想知道我是否需要互斥锁。

谢谢大家!

不,它不是线程安全的。 std::unordered_map class 不提供任何特殊的线程安全保证,只是所有标准 classes 默认提供的普通级别的线程安全。这意味着当另一个线程正在或可能正在修改它时,一个线程以任何方式访问该结构都是不安全的。