Thread-Sicherheit beim Schreiben eines std :: vector vs plain Arrays
Ich habe gelesenauf Stackoverflow DasKeiner der STL-Container ist threadsicher zum Schreiben. Aber was heißt das konkret? Bedeutet das, dass ich beschreibbare Daten in einfachen Arrays speichern sollte?
Ich erwarte gleichzeitige Anrufe anstd::vector::push_back(element)
Dies kann zu inkonsistenten Datenstrukturen führen, da die Größe des Vektors geändert werden kann. Aber was ist mit einem Fall wie diesem, bei dem die Größenänderung nicht beteiligt ist:
1) Verwenden eines Arrays:
int data[n];
// initialize values here...
#pragma omp parallel for
for (int i = 0; i < n; ++i) {
data[i] += func(i);
}
2) Verwenden eines `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);
}
Ist die erste Implementierung wirklich besser als die zweite a) in Bezug auf die Threadsicherheit und b) in Bezug auf die Leistung? Ich würde lieber einen std :: vector verwenden, da ich mit Arrays im C-Stil weniger vertraut bin.
EDIT: Ich entfernte ein#pragma omp atomic update
Schreibschutz.