Когда поток создается с политикой запуска установленной в std::launch::async
, описание дано на cppreference являетсяКогда выполняется std :: future?
новый поток запускается для выполнения задачи асинхронно
Если у меня есть некоторые произвольные функции
double Foo(double i)
{
return i * 5.0;
}
И я настроить async
вызов, как так
std::vector<double> values{5.0, 2.3, 7.1, 4.8, 1.5};
std::vector<std::future<double>> answers;
for (double value : values)
{
answers.push_back(std::async(std::launch::async,
Foo,
value));
}
Когда я называю std::accumulate
вот так:
double total = std::accumulate(begin(answers),
end(answers),
0.0,
[](double x, std::future<double>& t){return x + t.get();});
Когда каждый из потоков пнуть их исполнение? Они начали, как только они были добавлены в answers
? Или они ждут, пока не будут вызваны их get
? Если это так, я просто заставляю их выполнять последовательно, так как их get
вызывается в порядке выполнения accumulate
? Другими словами, я просто трачу свое время на создание этих фьючерсов, а затем заставляю их работать синхронно?
Примечание
Функция Foo
была только несколько примеров, фактическая функция я использую делает больше работы.
'get' ждет, пока не будет доступен результат. – njzk2