/* LatexBeginPackagedTaskSetup */ #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}; /* LatexBeginPackagedTaskWork */ vector> partial_results; for ( unsigned i{}; i < thread_count; ++i) { // wrap our function in a future-aware object packaged_task worker(accumulate); // get a handle to out future result partial_results.emplace_back( worker.get_future() ); // execute our function in it's own thread thread{ move(worker), d.begin(i), d.end(i), 0 }.detach(); } /* LatexBeginPackagedTaskSum */ cout << "Sum: " << accumulate(begin(partial_results), end(partial_results), 0, [](int sum, future& fut){ return sum + fut.get(); }) << endl; return 0; } /* LatexEndPackagedTask */