【问题标题】:std::map concurrency with one inserter thread and one reader thread一个插入器线程和一个读取器线程的 std::map 并发
【发布时间】:2013-01-16 13:26:15
【问题描述】:

我有一个线程(线程 A)不断迭代地图,比如 MapA。

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

我不会从 MapA 中删除元素

这个操作会不会有并发问题?

【问题讨论】:

  • 我不关心无效的迭代器,因为如果我到达地图的末尾我会连续循环我将迭代器重置为开始。
  • 你应该担心。当迭代器无效时,您可能永远无法针对 map 结尾对其进行测试,因为运算符 ++-- 会做出不可预测的事情。

标签: c++


【解决方案1】:

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

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

但是,插入std::map 不会使现有迭代器无效(请参阅Does insertion to STL map invalidate other existing iterator?

【讨论】:

  • 感谢 sonicwave 和 Benoit
猜你喜欢
  • 2015-12-25
  • 1970-01-01
  • 2015-11-02
  • 1970-01-01
  • 1970-01-01
  • 2020-08-24
  • 1970-01-01
  • 1970-01-01
  • 2012-09-01
相关资源
最近更新 更多