c++11,std::find的并行化模板化

来源:互联网 发布:股市模拟交易软件 编辑:程序博客网 时间:2024/06/05 13:28
#include <atomic>template<typename Iterator,typename MatchType>Iterator parallel_find_inter(Iterator first,Iterator last,MatchType match,std::atomic<bool>& done){try{unsigned long const length = std::distance(first,last);unsigned long const min_per_thread = 25;if(length < (2*min_per_thread)){for(;(first!=last)&&!done.load();++first){if(*first == match){done = true;return first;}}return last;}else{Iterator const mid_point = first + (length/2);std::future<Iterator> async_result = std::async(¶llel_find_inter<Iterator,MatchType>,mid_point,last,match,std::ref(done));Iterator const direct_result = parallel_find_inter(first,mid_point,match,done);return (direct_result == mid_point)?async_result.get():direct_result;}}catch(...){done = true;throw;}}template<typename Iterator,typename MatchType>Iterator parallel_find(Iterator first,Iterator last,MatchType match){std::atomic<bool>done(false);return parallel_find_inter(first,last,match,done);}

1 0
原创粉丝点击