如果迭代器没有因插入而无效,则使用std::find和C::insert()是线程安全的

Is using std::find and C::insert() thread safe if iterators are not invalidated by insert

本文关键字:insert find 安全 线程 std 迭代器 插入 无效 如果      更新时间:2023-10-16

假设我有一个容器C,其迭代器在C.insert((时没有失效,那么在执行并发insert(((时,我能安全地在容器上执行std::find((吗?也就是说,我是否保证找到一个匹配的元素或C::end((,忽略插入的元素可能匹配,但std::find((给了我C::end((?

否。尽管迭代器不会因您的变异操作而无效,但它仍然是一个变异操作,并且当变异操作在另一个线程中发生时,没有一个标准容器被定义为可以在一个线程内安全读取。请记住,容器中仍然存在各种内部状态的"内部",这两种操作都可能涉及这些内部状态。