【发布时间】:2014-08-15 10:26:47
【问题描述】:
下面是一个简单的并行程序,使用 tbb 计算标准向量中元素的总和。
有人可以帮我理解为什么它输出错误的结果吗?
#include <iostream>
#include <algorithm>
#include <numeric>
#include <tbb/tbb.h>
struct Sum {
int value;
Sum() : value(0) {}
Sum(Sum&s, tbb::split) : value(0) {}
void operator()(const tbb::blocked_range<std::vector<int>::iterator>& r) {
value = std::accumulate(r.begin(), r.end(), 0);
}
void join(Sum& rhs) { value += rhs.value; }
};
int main()
{
std::vector<int> a(100);
std::fill(a.begin(), a.end(), 1);
Sum sum;
tbb::parallel_reduce(tbb::blocked_range<std::vector<int>::iterator>(a.begin(), a.end()), sum);
std::cout << sum.value << std::endl;
return 0;
}
【问题讨论】:
标签: c++ c++11 concurrency tbb