32 #ifndef VSMC_THREAD_PARALLEL_REDUCE_HPP
33 #define VSMC_THREAD_PARALLEL_REDUCE_HPP
53 template <
typename Range,
typename WorkType>
57 std::vector<WorkType> work_vec(range_vec.size(), work);
59 std::vector<ThreadGuard<std::thread>> tg;
60 tg.reserve(range_vec.size());
61 for (std::size_t i = 0; i != range_vec.size(); ++i) {
63 std::ref(work_vec[i]), range_vec[i])));
66 for (std::size_t i = 0; i != work_vec.size(); ++i) work.join(work_vec[i]);
71 #endif // VSMC_THREAD_PARALLEL_REDUCE_HPP
void parallel_reduce(const Range &range, WorkType &work)
Parallel reduce using C++11 concurrency.
Strictly scope-based thread ownership wrapper.
static ThreadNum & instance()