可以在与find同时从stl:map中删除它

时间:2012-08-19 14:06:32

标签: c++ stl

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

2 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:1)

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

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

*除非它内部是线程安全的,否则设计很差。标准库中没有任何内容。