Есть ли у кого-нибудь опыт работы с довольно новой 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));
}