c ++映射的线程安全性

shi*_*wla 9 c++ thread-safety

这是关于线程安全的std::map.现在,同时读取是线程安全的,但写入不是.我的问题是,如果我每次都向地图添加唯一元素,那么它是否是线程安全的?

  1. 所以,举一个例子,如果我有这样的地图std:map<int, std::string> myMap ,我总是添加新的密钥,永远不会修改现有的键值,那么这是线程安全的吗?

  2. 更重要的是,这会给我任何随机的运行时行为吗?

  3. 添加新密钥是否也被视为修改?如果在添加时键总是不同的,那么它不应该是线程安全的,因为它修改了内存的独立部分吗?

谢谢Shiv

Arm*_*yan 16

1)当然不是

2)是的,我希望你会在测试期间遇到它,而不是以后

3)是的,确实如此.新元素添加在不同的位置,但在此期间会修改许多指针.

在大多数(如果不是全部)实现中,映射由某种树实现.在树中插入新元素通过重置指针以指向不同节点来重新排列节点来修改它.所以它不是线程安全的