我编写了以下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值。我做错了什么?