通常,当main()
退出时,所有线程都被杀死。 pthread_exit(3)
说
要允许其他线程继续执行,主线程应该通过调用pthread_exit()而不是exit(3)来终止。
是否有等效的C ++ 11 API调用?像std::this_thread::exit(0)
?
答案 0 :(得分:0)
从历史上看,main()
函数一直很特殊 - 它代表了应用程序的生命周期。 C ++ 11不会改变这一点。
当main
函数返回时,程序将清除并终止。这已被硬编码到C运行时。
阻止main
正常重新调整的任何操作都会起作用(但是没有可移植的方法来终止线程)。
你的案例中的解决方法可能只是永远阻止主线程,或者重新使用它来进行一些监控/内务管理。
答案 1 :(得分:0)
2012-01-16中的Working Draft, Standard for Programming Language C++的第1121页似乎表明,一旦主线程退出,它的分离线程也将被清除(除非我误解了它):
void detach();
要求:joinable()为真。
效果:由*表示的线程在没有调用线程阻塞的情况下继续执行。当detach()返回时,*这不再代表可能继续执行的线程。当先前由*表示的线程结束执行时,实现应释放任何拥有的资源。
后置条件:get_id()== id()。
当需要例外时抛出:system_error(30.2.2)。
错误条件:
- no_such_process - 如果线程无效。
- invalid_argument - 如果线程不可连接。