с учётом гарантий инвалидации итераторов этого контейнера.
Можно ли утверждать, что в многопотоке код:
{
const std::shared_lock lock{map_mtx};
auto first = std::begin(map);
}
// No locking here
for (;;) {
MyType value;
{
const std::shared_lock lock{map_mtx};
if (first == std::end(map))
break;
value = *first++;
}
foo(value);
}
будет валиден?
Да, всё нормально. А если ещё и модификации элементов нет, то и разыменовывать не обязательно под блокировкой.
Обсуждают сегодня