1

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

4

2 回答 2

6

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

于 2012-08-19T14:08:40.803 回答
1

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

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

*除非它是内部线程安全的,这是糟糕的设计。标准库中没有任何内容。

于 2012-08-19T14:30:18.653 回答