【发布时间】:2019-01-15 09:18:15
【问题描述】:
我想编写一个代码,使用 boost futures 和线程来并行计算多个函数:
函数名为“function”,接受“inputs”,我想将函数返回值存储在名为“results”的向量中
CODE 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();}
但我想让线程并行运行,所以我尝试执行此代码,它将期货存储在一个向量中,然后在所有期货准备好后立即获取结果。我使用 boost 中的 wait_for_all 函数来等待线程完成..
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()
}
我必须同时遵守 CODE 1 和 CODE 2,但得到不同的结果...我检查并发现 CODE 1 给出了正确的结果,但 CODE 2 没有,我不知道为什么?...我在这里错过了什么......?
【问题讨论】:
-
请发布一个完整的、可验证的示例并说明您对输出的期望
标签: c++ multithreading boost parallel-processing concurrent.futures