Нужно ли использовать критическую секцию при чтении данных из общего вектора / массива из каждого потока? Могут ли быть какие-либо конфликты?
#include <omp.h>
#include <vector>
// ...
using namespace std;
// ...
int main(int argc, char** argv)
{
vector<double> data;
// populating vector from a file, for example...
#pragma omp parallel num_threads(4)
{
// ...
// in this cycle I only READ from the vector 'data'
#pragma omp critical
{
for (vector<double>::iterator it = data.begin(); it < data.end(); it++)
{
double value = *it;
// do some actions with 'value'...
}
}
// ...
}
// ...
return 0;
}
Боюсь, что потоки могут работать некорректно при чтении из общего (общего) вектора. Я прав?
Задача ещё не решена.
Других решений пока нет …