线程安全与迭代器有效性

threadsafety vs Iterator validity

我有两个线程:

由于 std::map::erasestd::map::insert 保持映射的所有迭代器有效,我似乎不明白在这种情况下如何出现竞争条件。

评论说的是对的。我会将它们与您的陈述结合起来:

std::map::erase and std::map::insert 保持映射的所有迭代器有效 仅当它们按顺序执行时。

如果它们并行执行,一个线程(当它开始工作时)可能会面对一个部分修改的对象(另一个线程正在处理它)。对部分修改的对象执行操作的结果是不确定的。这就是问题的根源。

如果您使用 mutex 同步对对象的访问,一切都会正常进行。容器没有内置同步,因为这会显着降低它们的工作速度,而这只是有时需要。