在傑克遜維爾會議上提案P0024r2有效採用Parallelism TS的規範被接受爲C++17 (draft)。該提議增加了許多采用執行策略參數的算法的重載,以指示應考慮哪種並行性。有在<execution>
(20.19.2 [執行])已定義三個執行策略:使用STL並行算法的用戶有什麼限制?
std::execution::sequenced_policy
與constexpr
對象(20.19.4 [execpol.seq])std::execution::seq
(20.19.7 [parallel.execpol.objects ])來指示順序執行,類似於調用沒有執行策略的算法。std::execution::parallel_policy
(20.19.5 [execpol.par])與constexpr
對象std::execution::par
(20.19.7 [parallel.execpol.objects])指示執行可能使用多線程的算法。std::execution::parallel_unsequenced_policy
(20.19.6 [execpol.vec])與constexpr
對象std::execution::par_unseq
(20.19.7 [parallel.execpol.objects])指示執行可能使用向量執行和/或多個線程的算法。
STL算法通常將用戶定義的對象(迭代器,函數對象)作爲參數。 對於使用標準執行策略的並行算法可以使用它們的用戶定義對象有什麼限制?
例如,當使用類似於以下示例中的算法時,對FwdIt
和Predicate
有什麼影響?
template <typename FwdIt, typename Predicate>
FwdIt call_remove_if(FwdIt begin, FwdIt end, Predicate predicate) {
return std::remove_if(std::execution::par, begin, end, predicate);
}
閱讀http://en.cppreference.com/w/cpp/algorithm/execution_policy_tag_t我明白這是用戶責任......無論如何......所以我也在等待回覆 – PiotrNycz