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

Can each Iteration of a for loop/for_each be done in parallel? (C++11)

本文关键字:for C++11 并行 迭代 循环 each 都可以      更新时间:2023-10-16

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

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::async 和 std::future 看起来很有希望。

你可以做这样的事情

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

或者你可以使用更复杂的东西,比如英特尔的线程构建块和它的parallel_for(这不是名字吗?)功能。

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

如果您面向 Windows/VS2010(或更高版本),则始终可以使用 Microsoft 中的并行模式库 (PPL)。它有parallel_for_each

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