cppreference и стандарт C ++ на самом деле расходятся по этому поводу.cppreference говорит об этом (выделение и зачеркивание):
Функция шаблона async
выполняет функцию f
асинхронно ( потенциально опционально в отдельном потоке , который можетбыть частью пула потоков ).
В то время как стандарт C ++ гласит:
Если в * установлено launch::async
1019 *, [std::async
] вызывает [функцию f] , как будто в новом потоке выполнения ...
И это явно две разные вещи.
Только реализация Windows std::async
использует пул потоков AFAIK, в то время как gcc и clang запускают новый поток для каждого вызова std::async
(когда launch::async
установлен в policy
) и, следовательно, следуютстандарт.
Больше анализа здесь: https://stackoverflow.com/a/50898570/5743288