【问题标题】:Is it ok to erase from stl:map in concurrent with find可以从 stl:map 与 find 同时擦除吗
【发布时间】:2012-08-19 14:06:32
【问题描述】:

我想知道在 find 的同时从 stl:map 中擦除是否可以? 并发意味着 - 两个线程同时尝试,一个擦除,一个调用 find。

【问题讨论】:

标签: c++ stl


【解决方案1】:

当然不是。 stl::map 基于自动平衡二叉树(通常是红黑)。 erase 最终可能会导致重排树。

【讨论】:

    【解决方案2】:

    在同一个对象上同时调用一个const方法和一个非const方法是不行的,同时调用2个非const方法也是不行的。但是,可以同时调用 2 个const 方法。这适用于所有* const 正确的代码,而不仅仅是标准库。

    所以,在你的情况下,不,它不安全。

    *除非它是内部线程安全的,否则这是糟糕的设计。标准库中什么都没有。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-24
      • 2021-06-10
      • 2018-04-14
      • 1970-01-01
      • 1970-01-01
      • 2016-08-26
      • 2020-06-23
      • 2013-06-23
      相关资源
      最近更新 更多