#include #include #include #include #include "divider.h" using namespace std; using data = vector; using data_it = data::iterator; int main() { const auto thread_count{9}; vector v(100000000, 1); Divider> d{v, thread_count}; vector> partial_results; for ( unsigned i{}; i < thread_count; ++i) { promise p; // get a handle to out future result partial_results.emplace_back( p.get_future() ); // execute our function in it's own thread thread{ // wrap our function in a future-aware lamda [](promise p, data_it b, data_it e, int s) { auto r{ accumulate(b, e, s) }; p.set_value(r); }, // specify thread argumenta move(p), d.begin(i), d.end(i), 0 }.detach(); } cout << "Sum: " << accumulate(begin(partial_results), end(partial_results), 0, [](int sum, future& fut){ return sum + fut.get(); }) << endl; return 0; }