如果父/主线程死亡,std::async调用会发生什么?
What happens to std::async call if parent/main thread dies
如果我是对的,std::async使用一个新线程并调用其中的方法。我想知道如果主线程或父线程死亡会发生什么。控制异步方法的线程是否也死了?
在c++中没有"父"线程的概念,每个线程都独立于创建它的线程。但是,main
线程是特殊的,如果它从main()
返回或调用exit()
,那么即使其他线程仍在运行,整个应用程序也将终止。一旦发生这种情况,如果仍在运行的线程访问主线程堆栈中的任何全局变量或自动对象,或使用任何标准库对象或调用信号处理程序中不允许的任何函数,则程序具有未定义的行为。
简而言之,如果您希望得到合理的结果,就不要让其他线程在main
完成后运行。
相关文章:
- 使用用户定义的参数调用future/async并调用类方法
- std::async 如何工作:为什么它会调用这么多次复制/移动?
- std::async 不会立即调用
- 在Visual Studio中,与std::async一起使用时不调用"thread_local"变量"析构函数,这是一个错误吗?
- 为什么使用线程池时嵌套调用 boost::async 会阻塞?
- 使用 std::async 调用模板函数的正确方法是什么?
- C 中多个async调用
- 有没有一种方法可以从C++中调用"async"python方法
- 当Qt-Slot位于通过std::async创建的线程上时,它不会被调用
- 应该在游戏循环c++中调用std::async吗
- 如何使用“std::async”在互斥锁保护循环中调用函数
- 使用C++11期货:std::async崩溃的嵌套调用:编译器/标准库错误
- 可以 std::async 调用 std::function 对象
- 为什么调用 std::async 后的时间成本为 0 秒
- 在高频率下调用std::async可以吗
- 用std::async调用带unique_ptr类型的函数
- 为什么std::async即使指定了std::launch::async标志,也要同步调用函数?
- 使用std::async从线程调用函数
- 用线程池替换许多std::async调用
- 在c++中使用函数列表来调用async