OpenMP Parallel: Lesen von gemeinsamer Referenz
-
Hallo ihr Lieben,
ich habe mal wieder eine Frage.
In diesem Post heißt es, dass sich lesender Zugriff verschiedener Threads auf verschiedene Indizes eines Array eigentlich nicht im Weg stehen.
Deshalb die naive Frage: Ist der nachfolgende Code 'eigentlich' in Ordnung? Jeder Thread soll eine Funktion zur Verfügung gestellt bekommen - nämlich
operator()des Wrappers - mit welcher der Index i des Vektors ausgelesen werden kann.#include <iostream> #include <vector> #include <omp.h> struct wrapper { wrapper(std::vector<double>&, int); std::vector<double>& vec; int i; double operator()(); }; wrapper::wrapper(std::vector<double>& vec, int i):vec(vec),i(i){} auto wrapper::operator()() -> double { return vec[i]; } int main() { std::vector<double> vec({{1.2,3.4,6.38,10.23}}); omp_set_num_threads(vec.size()); # pragma omp parallel { wrapper wrap(vec,omp_get_thread_num()); # pragma omp critical { std::cout << wrap() << std::endl; } } return 0; }Gruß,
-- Klaus.