Я хочу написать код, в котором я использую фьючерсы и потоки повышения для параллельного вычисления нескольких функций:
Функция называется «функция», которая принимает «входы», и я хочу сохранить возвращаемые функцией значения в векторе с именем «результаты»
КОД 1 (только часть основного кода):
for (int i = 0; i < max_iter; i++) {
boost::shared_future<double>> future = boost::async(boost::launch::async,boost::bind(&function,input));
results[i] = future.get();}
Но я бы хотел, чтобы потоки работали параллельно, поэтому я попытался сделать этот код, который сохраняет фьючерсы в векторе, а затем получает результаты, как только все фьючерсы будут готовы. Я использовал функцию wait_for_all из boost для ожидания завершения потоков ..
CODE 2 (только часть основного кода):
for (int i = 0; i < max_iter; i++) {
boost::shared_future<double>> future = boost::async(boost::launch::async,boost::bind(&function,input));
future_buffer.push_back(future);
boost::wait_for_all(future_buffer.begin(), future_buffer.end())
for (int l = 0; l < max; l++) {
results[l] = future_buffer[l].get()
}
Я должен соблюдать как КОД 1, так и КОД 2, но получаю разные результаты ... Я проверял, и КОД 1 дает правильные результаты, а КОД 2 - нет, и я не мог понять, почему? ... что мне здесь не хватает ...?