Segmento de segurança de escrever uma matriz std :: vector vs plain

Eu lino Stackoverflow naquelaNenhum dos contêineres STL é thread-safe para gravação. Mas o que isso significa na prática? Isso significa que eu deveria armazenar dados graváveis ​​em matrizes simples?

Espero chamadas simultâneas parastd::vector::push_back(element) poderia levar a estruturas de dados inconsistentes, pois poderia implicar redimensionar o vetor. Mas que tal um caso como este, onde o redimensionamento não está envolvido:

1) usando uma matriz:

int data[n];
// initialize values here...

#pragma omp parallel for
for (int i = 0; i < n; ++i) {
    data[i] += func(i);
}

2) usando um `std :: vector``:

std::vector<int> data;
data.resize(n);
// initialize values here...

#pragma omp parallel for
for (int i = 0; i < n; ++i) {
    data[i] += func(i);
}

A primeira implementação é realmente melhor que a segunda em termos de segurança de rosca eb) em termos de desempenho? Eu preferiria usar um std :: vector, já que estou menos confortável com os arrays de estilo C.

EDIT: eu removi um#pragma omp atomic update protegendo a gravação.

questionAnswers(4)

yourAnswerToTheQuestion