Ответ 1
Поскольку существующие ответы не охватывают его (только комментарий), я просто упомянул 23.2.2 [container.requirements.dataraces] текущего стандартная спецификация С++, в которой говорится:
чтобы избежать сбоев данных, когда содержимое содержащегося объекта в разных элементах в одной и той же последовательности, за исключением
vector<bool>
, изменяется одновременно.
то есть. он безопасен для доступа к отдельным элементам одного и того же контейнера, поэтому, например, вы можете иметь глобальный std::vector<std::future<int>>
из десяти элементов и иметь десять потоков, каждый из которых записывается в другой элемент вектора.
Кроме того, те же правила применяются к контейнерам, что и для остальной части стандартной библиотеки (см. 17.6.5.9 [res.on.data.races]), в качестве Mr. C64 answer, а также [container.requirements.dataraces] перечисляет некоторые неконстантные функции-члены контейнеров, которые можно назвать безопасно, потому что они возвращают не-const ссылки на элементы, они фактически ничего не изменяют ( в общем случае любая не-константная функция-член должна рассматриваться как модификация.)