有沒有人有相當新的std::async
的經驗?我們目前正在實現一個並行文件解析器,它讀取一個文件塊並將這個塊傳遞給一個異步函數。GCC的行爲與std :: async(std :: launch :: async)與Clang的行爲
使用Clang(v3.0)這種方式非常適用於默認的std::async
策略(取決於實施)。在兩個核心的機器上,最多可以啓動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使用的不同的內存佈局,並且它們的實現並不是很多。 – 2012-04-07 23:49:15