誰かが新しくstd::async
の経験を持っていますか?私たちは現在、ファイルチャンクを読み込んでこのチャンクを非同期関数に渡すパラレルファイルパーサーを実装しています。std :: async(std :: launch :: async)とGCCの動作がClangの動作と対比して
このようにClang(v3.0)を使用すると、デフォルトのstd::async
ポリシー(実装に依存します)で本当にうまく動作します。 2つのコアマシンでは、実際にうまくいくものを最大4つのスレッドで起動します。
しかし、GCC(v4.7)では、ファイル読み込みスレッドは新しいスレッドを生成しないので、最後のプログラムは完全に逐次的になります。
std::launch::async
を使用すると、どちらのバージョンもほぼ同じことをしています(その場合はどうすればよいでしょうか)。
GCCのC++ 11スレッディング機能の現在のステータスを知っている人はいますか?あるいは、これは私たちの実装では誤りでしょうか?
ショートコード:
while (readNewChunk()) {
Chunk &chunk = fileReader_.getChunk(); //reading the file
ChunkLoader *chunkLoader = new ChunkLoader();
auto ftr = std::async(std::launch::async, &ChunkLoader::createDictionaries, chunkLoader);
dictCreationFutures_.push_back(std::move(ftr));
}
Boostを使用することをお勧めします。適切なC++ 11のサポートに大きな飛躍はありません。 C++ 11の新しいスレッドモデルでは、GCCやMSVCが使用しているメモリとは異なるメモリレイアウトが必要です。 –