add original source
This commit is contained in:
24
source/listing_8.8.cpp
Normal file
24
source/listing_8.8.cpp
Normal file
@@ -0,0 +1,24 @@
|
||||
template<typename Iterator,typename Func>
|
||||
void parallel_for_each(Iterator first,Iterator last,Func f)
|
||||
{
|
||||
unsigned long const length=std::distance(first,last);
|
||||
|
||||
if(!length)
|
||||
return;
|
||||
|
||||
unsigned long const min_per_thread=25;
|
||||
|
||||
if(length<(2*min_per_thread))
|
||||
{
|
||||
std::for_each(first,last,f);
|
||||
}
|
||||
else
|
||||
{
|
||||
Iterator const mid_point=first+length/2;
|
||||
std::future<void> first_half=
|
||||
std::async(¶llel_for_each<Iterator,Func>,
|
||||
first,mid_point,f);
|
||||
parallel_for_each(mid_point,last,f);
|
||||
first_half.get();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user