使用迭代器的OpenMP for循环给出了不正确的结果

时间:2018-03-14 18:15:01

标签: c++ openmp

我编写了以下OpenMP程序,该程序使用迭代器作为循环索引来计算向量的元素总和,但它不能打印正确的结果:

#include <omp.h>
#include <vector>
#include <stdio.h>
using namespace std;
#define NT 10

int main()
{
    vector<int> vec;
    vector<int>::iterator it;
    int sum = 0;
    int k = 0;

    for (int i = 0; i < NT; i++)
        vec.push_back(i);

    k = vec.end() - vec.begin();
    printf("vec.end() - vec.begin() = %d\n", k);

    #pragma omp parallel for default(none) shared(vec, sum) private(it)
    for (it = vec.begin(); it < vec.end(); it++) {
        #pragma critical
        sum += *it;
    }

    printf("sum = %d\n", sum);
}

我在程序的不同运行中得到不同的sum值。我做错了什么?

0 个答案:

没有答案