说我有一个初始化但空的std :: unordered_map,并且有两个同时存在的线程将填充它。这两个线程只会写到映射,直到两个线程完成,都不会从映射中读取任何内容。
此外,这两个线程将永远不会对映射中的相同键进行操作。例如,假设线程1将填充键“ A”到“ M”,而线程2将同时填充键“ N”到“ Z”。
此线程安全吗?
在我当前的实现中,我有8个线程以上述方式写入一个互斥的std :: unordered_map。互斥锁显然会减慢该过程的速度(大约有10,000个键被填充),所以我想知道我是否甚至需要互斥锁。
谢谢!
答案 0 :(得分:6)
不,它不是线程安全的。 std::unordered_map
类不提供任何特殊的线程安全保证,只是所有标准类默认提供的相同级别的线程安全。这意味着一个线程以任何方式访问该结构都是不安全的,而另一个线程正在或可能正在修改它。