std::future 可以在没有 get 或 wait 的情况下导致 coredump
Can std::future cause coredump without get or wait
void func() {
std::future<int> fut = std::async(std::launch::async, []{
std::this_thread::sleep_for(std::chrono::seconds(10));
return 8;
});
return;
}
假设我有这样的功能。 std::future<int>
的对象 fut
使用 std::async
作业初始化,将来会 return 一个整数。但是fut
会在函数func
returns.
之后立即释放
是否存在这样的问题:当std::async
作业returns并尝试将8
分配给对象fut
时,对象已经被释放...
如果是这样,可能会发生关于 SIGSEGV 的核心转储...
我说得对吗?或者 std::future
有一些机制可以避免这个问题?
使用 std::async
创建的 Futures 有一个等待任务完成的阻塞析构函数。
即使您改为从 std::promise
创建未来,~future()
的文档也不会提及您所询问的问题。
文档经常使用术语“共享状态”,暗示一个 promise 和一个 future 共享一个(heap-allocated?)状态,它持有 return 值,而不是销毁直到双双死亡。
void func() {
std::future<int> fut = std::async(std::launch::async, []{
std::this_thread::sleep_for(std::chrono::seconds(10));
return 8;
});
return;
}
假设我有这样的功能。 std::future<int>
的对象 fut
使用 std::async
作业初始化,将来会 return 一个整数。但是fut
会在函数func
returns.
是否存在这样的问题:当std::async
作业returns并尝试将8
分配给对象fut
时,对象已经被释放...
如果是这样,可能会发生关于 SIGSEGV 的核心转储...
我说得对吗?或者 std::future
有一些机制可以避免这个问题?
使用 std::async
创建的 Futures 有一个等待任务完成的阻塞析构函数。
即使您改为从 std::promise
创建未来,~future()
的文档也不会提及您所询问的问题。
文档经常使用术语“共享状态”,暗示一个 promise 和一个 future 共享一个(heap-allocated?)状态,它持有 return 值,而不是销毁直到双双死亡。