从每个线程的公共向量/数组中读取数据时,是否必须使用临界区?会不会有什么冲突?
#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;
}
我担心从公共(共享)向量中读取时线程可能无法正常工作。我对吗?