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 は特定の Web サイトに接続して HTML を分析するため、コードは非常に遅くなります。
これをスピードアップするための最良の方法は何でしょうか?
私の目標は、複数の DataT を同時に分析することです。
私はスレッド化に非常に慣れていませんが、std::asyncstd::futureは有望に見えます。

4

3 に答える 3

9

このようなことができます

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

parallel_forまたは、Intel の Thread Building Blocks とその(名前ではないですか?) 関数のような、より複雑なものを使用することもできます。

于 2012-04-14T16:56:47.557 に答える
6

GCCを使用していますか?最近のバージョンには、の並列バージョンがありますfor_each(使用方法についてはこちらを参照してください)。

于 2012-04-14T21:52:19.790 に答える
3

Windows/VS2010 (またはそれ以降) を対象とする場合は、Microsoftの The Parallel Patterns Library (PPL)をいつでも使用できます。それは持っていますparallel_for_each

parallel_for_each(values.begin(), values.end(), [] (int& value)
{
  value *= 2;
});
于 2012-04-14T18:44:42.780 に答える