известно, что operator [] не является одновременно безопасным для записи: concurrent_vector :: operator [] Operator Но что, если я гарантирую, что разные потоки будут писать в разные позиции вектора?Вот так (очень упрощенный пример):
concurrent_vector<double> vec; vec.resize(100); parallel_for(0, 100, [&] (double ind) { vec[ind] = ind*ind; }
Это одновременно безопасно или нет?А если «нет», то почему? Спасибо
Да, это одновременно безопасно, как если бы вы обращались к различным переменным.
Как указал ildjam в комментарии, это было бы безопасно, даже с обычными std::vector или, позвольте мне добавить, с простыми массивами.
std::vector