Поведение GCC's с std::async(std::launch::async)по сравнению с Clang's поведением

Есть ли у кого-нибудь опыт работы с довольно новой 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));
}
10
задан Nicol Bolas 8 April 2012 в 01:55
поделиться