32 #ifndef VSMC_THREAD_PARALLEL_ACCUMULATE_HPP
33 #define VSMC_THREAD_PARALLEL_ACCUMULATE_HPP
52 template <
typename Range,
typename T,
typename WorkType>
56 std::vector<T> result(range_vec.size());
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::forward<WorkType>(work),
64 range_vec[i], std::ref(result[i]))));
69 for (std::size_t i = 0; i != result.size(); ++i)
84 template <
typename Range,
typename T,
typename Bin,
typename WorkType>
89 std::vector<T> result(range_vec.size());
92 std::vector<ThreadGuard<std::thread>> tg;
93 tg.reserve(range_vec.size());
94 for (std::size_t i = 0; i != range_vec.size(); ++i) {
96 std::forward<WorkType>(work),
97 range_vec[i], std::ref(result[i]))));
102 for (std::size_t i = 0; i != result.size(); ++i)
103 acc = bin_op(acc, result[i]);
110 #endif // VSMC_THREAD_PARALLEL_ACCUMULATE_HPP
Strictly scope-based thread ownership wrapper.
static ThreadNum & instance()
T parallel_accumulate(const Range &range, WorkType &&work, T init)
Parallel accumulate using C++11 concurrency.