for循环/ for_each的每个迭代都可以并行完成吗? (C ++ 11)

时间:2012-04-14 16:53:01

标签: c++ asynchronous c++11 parallel-processing future

我正在迭代一个结构向量并单独处理每个结构 它看起来像这样:

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 加快这个速度的最佳方法是什么? 我的目标是同时分析多个DataT 我对线程很新,但std::asyncstd::future看起来很有希望。

3 个答案:

答案 0 :(得分:9)

你可以做这样的事情

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

或者您可以使用更复杂的东西,如英特尔的线程构建模块和parallel_for(不是名称?)功能。

答案 1 :(得分:6)

你在使用GCC吗?最新版本具有for_each的并行版本(有关如何使用它,请参阅here。)

答案 2 :(得分:3)

如果您定位Windows / VS2010(或更高版本),则始终可以使用Microsoft的The Parallel Patterns Library (PPL)。它有parallel_for_each

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