各スレッドから共通のベクトル/配列からデータを読み取るときに、クリティカル セクションを使用する必要がありますか? 競合が発生する可能性はありますか?
#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;
}
共通 (共有) ベクトルから読み取るときに、スレッドが正しく動作しない可能性があるのではないかと心配しています。私は正しいですか?