在主线程退出后,C ++ 11线程是否为分离线程提供了一种方法?

时间:2016-06-29 18:41:21

标签: c++ multithreading c++11 pthreads

通常,当main()退出时,所有线程都被杀死。 pthread_exit(3)

  

要允许其他线程继续执行,主线程应该通过调用pthread_exit()而不是exit(3)来终止。

是否有等效的C ++ 11 API调用?像std::this_thread::exit(0)

这样的东西

2 个答案:

答案 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 - 如果线程不可连接。