Политика запуска std::launch::async | std::launch::deferred
означает, что реализация может выбрать, применять ли политику std::launch::async
или std::launch::deferred
.Этот выбор может варьироваться от звонка к звонку и не может быть решен немедленно.
Реализация, которая всегда выбирает одну или другую, является, таким образом, законной (что делает gcc, всегда выбирая отложенную), как и та, котораявыбирает std::launch::async
до тех пор, пока не будет достигнут некоторый предел, а затем переключается на std::launch::deferred
.
Это также означает, что реализация может отложить выбор на более поздний срок.Это означает, что реализация может ожидать принятия решения, пока ее рука не будет вызвана вызовом, который имеет явно различимые эффекты от отложенных и асинхронных задач, или пока количество запущенных задач не станет меньше внутреннего предела задачи.Это то, что just :: thread делает.
Функции, которые вызывают принятие решения: wait()
, get()
, wait_for()
, wait_until()
и деструкторпоследний объект будущего, ссылающийся на результат.