【发布时间】:2012-08-19 14:06:32
【问题描述】:
我想知道在 find 的同时从 stl:map 中擦除是否可以? 并发意味着 - 两个线程同时尝试,一个擦除,一个调用 find。
【问题讨论】:
-
“并发”是什么意思?一个线程执行
erase而另一个线程调用find?那不行:) -
请提供代码示例。你的问题模棱两可。
我想知道在 find 的同时从 stl:map 中擦除是否可以? 并发意味着 - 两个线程同时尝试,一个擦除,一个调用 find。
【问题讨论】:
erase 而另一个线程调用find?那不行:)
当然不是。 stl::map 基于自动平衡二叉树(通常是红黑)。 erase 最终可能会导致重排树。
【讨论】:
在同一个对象上同时调用一个const方法和一个非const方法是不行的,同时调用2个非const方法也是不行的。但是,可以同时调用 2 个const 方法。这适用于所有* const 正确的代码,而不仅仅是标准库。
所以,在你的情况下,不,它不安全。
*除非它是内部线程安全的,否则这是糟糕的设计。标准库中什么都没有。
【讨论】: