std::vector 上的 tbb::parallel_reduce

use*_*843 2 c++ concurrency tbb c++11

下面是一个简单的并行程序,用于使用 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;  
}
Run Code Online (Sandbox Code Playgroud)

For*_*veR 5

既然你用accumulate错了。它应该是

value = std::accumulate(r.begin(), r.end(), value);
Run Code Online (Sandbox Code Playgroud)