В этом конкретном примере это будет безопасно.
Причина в том, что вы не используете операции, которые могут вызвать перераспределение.(например, push_back()
).Вы изменяете только содержимое отдельных элементов.
Обратите внимание, что вы можете сделать это легально:
std::vector<int> v(1000);
int *ptr = &v[0];
# pragma omp parallel for
for (int i = 0; i < 1000; ++i) {
ptr[i] = i;
}
Когда вы начинаете вызывать, он становится не поточнобезопаснымтакие методы, как push_back()
, pop_back()
, insert()
и т. д. из нескольких потоков.
Я также добавлю, что этот конкретный пример не подходит для параллелизма, так как едва ли есть какая-либо работабыть сделано.Но я полагаю, что это просто тупой пример с целью задать этот вопрос.