有没有人有相当新的经验std::async
?我们目前正在实现一个并行文件解析器,它读取一个文件块并将这个块传递给一个异步函数。
以这种方式使用 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));
}