主线程退出 / 进程退出对子线程的影响
主线程退出 / 进程退出对子线程的影响
1.线程是依赖于进程,所谓线程是把当前进程的资源分割一部分出来给线程使用。如果进程退出的话,进程的整个资源会被回收了,这时候,不管你创建出来的子线程是否已经执行结束、都会跟着进程一起退出。
2.正常情况下,线程之间运行是互不干扰的,线程的退出(包括主线程的退出)对其他线程不会起到什么影响。
打个比方:在主函数中不调用return 去结束进程,使用pthread_exit()去结束主进程,即主线程先与子线程退出。执行的效果是打印完“”主线程退出之后“”、一直打印“线程运行”,这时候,子线程也叫孤儿线程,因为没有了主线程。
补充:
(1)使用 pthread_t main_tid = pthread_self();获取主线程的id, 再用pthread_create将id传给子线程,然后再子线程中调用pthread_cancel(主线程的id)也可以结束主线程。
(2)所有线程退出之后,进程也会退出。
(3)其他线程还在运行的情况下,在主线程用return 0、exit()可以结束线程。在子线程中不能用return中结束,但可以用exit()可以退出线程。
(4)线程分为可结合的(joinable)和 分离的(detached)两种,如果没有在创建线程时设置线程的属性为PTHREAD_CREATE_DETACHED,则线程默认是可结合的。可结合的线程在线程退出后不会立即释放资源,必须要调用pthread_join来显式的结束线程。分离的线程在线程退出时系统会自动回收资源。
如果你的进程不退出的话并且你的线程不是分离的状态,建议线程退出之后都要给他回收。
以上是我的个人看法,没有权威,如果有那些说错的地方,欢迎各位大牛前来指点。。