C++ 在向量中存储 std::future 形式 std::async 并等待所有
C++ storing std::future form std::async in vector and wating for all
我想与 std::async 并行执行多个任务,然后等到所有 futures 完成。
void update() {
// some code here
}
int main() {
std::vector<std::future<void>> handles(5);
for (int i = 0; i < 5; ++i) {
auto handle = std::async(std::launch::async, &update);
handles.emplace_back(std::move(handle));
}
for (auto& handle : handles) {
handle.wait();
}
return 0;
}
但是在执行程序时我得到一个 std::future_error
抛出:
terminate called after throwing an instance of 'std::future_error'
what(): std::future_error: No associated state
Aborted (core dumped)
我想知道为什么。我不应该能够存储未来的对象吗?
您用 5 个默认构造的元素初始化了 handles
数组,然后又在其中放置了 5 个。它现在有 10 个元素,其中前 5 个是默认构造的,因此与等待的任何内容都没有关联。
不要创建包含 5 个元素的向量。我认为您正在尝试 为 5 个元素保留 space - 这可以通过在构建矢量后调用 reserve
来完成。
我想与 std::async 并行执行多个任务,然后等到所有 futures 完成。
void update() {
// some code here
}
int main() {
std::vector<std::future<void>> handles(5);
for (int i = 0; i < 5; ++i) {
auto handle = std::async(std::launch::async, &update);
handles.emplace_back(std::move(handle));
}
for (auto& handle : handles) {
handle.wait();
}
return 0;
}
但是在执行程序时我得到一个 std::future_error
抛出:
terminate called after throwing an instance of 'std::future_error'
what(): std::future_error: No associated state
Aborted (core dumped)
我想知道为什么。我不应该能够存储未来的对象吗?
您用 5 个默认构造的元素初始化了 handles
数组,然后又在其中放置了 5 个。它现在有 10 个元素,其中前 5 个是默认构造的,因此与等待的任何内容都没有关联。
不要创建包含 5 个元素的向量。我认为您正在尝试 为 5 个元素保留 space - 这可以通过在构建矢量后调用 reserve
来完成。