0

从每个线程的公共向量/数组中读取数据时,是否必须使用临界区?会不会有什么冲突?

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

我担心从公共(共享)向量中读取时线程可能无法正常工作。我对吗?

4

0 回答 0