可循环/的for_each的每一次迭代并行完成? (C ++ 11)(Can each Iter

2019-07-29 00:10发布

我遍历结构的载体和处理每个独立结构。
它看起来是这样的:

for_each(begin(data),end(data),DoTask);
//assume "data" is std::vector<DataT>  
//assume DoTask is a function that takes a DataT by reference

该代码是显著慢,因为DoTask连接到特定的网站和HTML分析。
什么是加快这最好的方法是什么?
我的目标是分析多个DataTs在同一时间。
我很新的线程,但性病::异步和性病::未来的看好。

Answer 1:

你可以做这样的事情

for(T& d : data) std::thread(DoTask, d).detach();

或者你可以使用更复杂的东西像英特尔线程构建模块和parallel_for (是不是叫什么名字?)功能上。



Answer 2:

您是否使用GCC? 最新版本具有的并行版本for_each (参见这里了解如何使用它)。



Answer 3:

您可以随时使用的并行模式库(PPL)从微软,如果你面向Windows / VS2010(或更高版本)。 它有parallel_for_each

parallel_for_each(values.begin(), values.end(), [] (int& value)
{
  value *= 2;
});


文章来源: Can each Iteration of a for loop/for_each be done in parallel? (C++11)