誰かがかなり新しいの経験がありstd::async
ますか? 現在、ファイル チャンクを読み取り、このチャンクを非同期関数に渡す並列ファイル パーサーを実装しています。
std::async
この方法で Clang (v3.0) を使用すると、デフォルトのポリシー (実装に依存)で非常にうまく機能します。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));
}