主线程和子线程,在操作系统里面其实是一样的,没有本质区别。至于主线程结束,子线程是否要回收,下面有两种比较特殊的情况。
第一种:
主线程退出了,子线程还可以执行。 主要是因为pthread_exit函数。主线程里面的main函数没有执完,主线程结束了,操作系统的不会执行相应的资源回收函数,去将进程的资源回收,要等待最后一个线程结束了,进程资源才会回收。
void pthread_exit(void *retval); 参数:retval表示线程退出状态,通常传NULL。
作用:将单个线程退出。
第二种情况:没有pthread_exit。
没有 pthread_exit函数,主线程里面的main函数执行完了,返回了,操作系统的会执行相应的资源回收函数,会将进程的资源回收。
这两种情况是比较特殊的,正常我们都是主线程去回收子线程,或者使用pthread_detach函数分离子线程,让操作系统帮忙回收。
/*等待线程结束*/
pthread_join(id,NULL);
int pthread_detach(pthread_t thread); 成功:0;失败:错误号
作用:从状态上实现线程分离,注意不是指该线程独自占用地址空间