Безопасность concurrent_vector - PullRequest
2 голосов
/ 20 марта 2012


известно, что operator [] не является одновременно безопасным для записи: concurrent_vector :: operator [] Operator Но что, если я гарантирую, что разные потоки будут писать в разные позиции вектора?Вот так (очень упрощенный пример):

concurrent_vector<double> vec;
vec.resize(100);

parallel_for(0, 100, [&] (double ind)
{
    vec[ind] = ind*ind;
}

Это одновременно безопасно или нет?А если «нет», то почему?

Спасибо

1 Ответ

2 голосов
/ 20 марта 2012

Да, это одновременно безопасно, как если бы вы обращались к различным переменным.

Как указал ildjam в комментарии, это было бы безопасно, даже с обычными std::vector или, позвольте мне добавить, с простыми массивами.

...