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.