有没有人有相当新的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