C++ std::映射一个插入器线程和一个读线程的并发性

C++ std::映射一个插入器线程和一个读线程的并发性,c++,C++,我有一个线程(线程a),它不断地在地图上迭代,比如MapA 现在有另一个线程(ThreadB)将元素插入MapA 我不会从MapA中删除元素 此操作是否会出现任何并发问题?在插入新项时,线程安全/并发问题与使迭代器无效之间存在区别 STL本质上不是线程安全的,因此在执行任何操作时,除了从多个线程读取STL对象外,请确保互斥锁 但是,在std::map中插入不会使现有迭代器无效(请参见)在插入新项时,线程安全/并发问题与使迭代器无效之间存在区别 STL本质上不是线程安全的,因此在执行任何操作时,除

我有一个线程(线程a),它不断地在地图上迭代,比如MapA

现在有另一个线程(ThreadB)将元素插入MapA

我不会从MapA中删除元素


此操作是否会出现任何并发问题?

在插入新项时,线程安全/并发问题与使迭代器无效之间存在区别

STL本质上不是线程安全的,因此在执行任何操作时,除了从多个线程读取STL对象外,请确保互斥锁


但是,在
std::map
中插入不会使现有迭代器无效(请参见)

在插入新项时,线程安全/并发问题与使迭代器无效之间存在区别

STL本质上不是线程安全的,因此在执行任何操作时,除了从多个线程读取STL对象外,请确保互斥锁


但是,插入到
std::map
不会使现有迭代器无效(请参见)

我不关心无效的迭代器,因为如果我到达map的末尾,我会连续循环,我会将迭代器重置为begining。您应该关心。当迭代器无效时,您可能永远无法在映射末尾对其进行测试,因为运算符
++
--
将执行不可预知的操作。我不关心无效迭代器,因为如果我到达映射末尾,我会不断循环,然后将迭代器重置为开始。您应该关心。当迭代器无效时,您可能永远无法在映射结束时对其进行测试,因为运算符
++
--
将执行不可预知的操作。谢谢sonicwave和BenoitThanks sonicwave和Benoit