仅写到共享的std :: unordered_map线程安全吗?

时间:2019-01-31 16:50:41

标签: c++ c++11 unordered-map

说我有一个初始化但空的std :: unordered_map,并且有两个同时存在的线程将填充它。这两个线程只会写到映射,直到两个线程完成,都不会从映射中读取任何内容。

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

此线程安全吗?

在我当前的实现中,我有8个线程以上述方式写入一个互斥的std :: unordered_map。互斥锁显然会减慢该过程的速度(大约有10,000个键被填充),所以我想知道我是否甚至需要互斥锁。

谢谢!

1 个答案:

答案 0 :(得分:6)

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