Когда использовать критические участки и барьеры в OMP?

Нужно ли использовать критическую секцию при чтении данных из общего вектора / массива из каждого потока? Могут ли быть какие-либо конфликты?

#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;
}

Боюсь, что потоки могут работать некорректно при чтении из общего (общего) вектора. Я прав?

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector