为了在用线程分离的时候保证即使主线程退出了,子线程还能正常运行,可以使用pthread_exit(NULL)去退出主线程,这样地址空间还能正常存在
线程分离是为了保证主线程不会被堵塞,还能继续运行,这种情况下回收有系统进行。
正常运行的时候有阻塞是因为在我们使用默认属性创建一个线程的时候,线程是 joinable 的。 joinable 状态的线程,必须在另一个线程中使用 pthread_join() 等待其结束,如果一个 joinable 的线程在结束后,没有使用 pthread_join() 进行操作,这个线程就会变成”僵尸线程”。每个僵尸线程都会消耗一些系统资源,当有太多的僵尸线程的时候,可能会导致创建线程失败。
比如创建一个主线程和子线程,结果子线程先结束并且没有被回收,这种时候就会成为僵尸进程,如果主进程先结束问题不大,这种时候就会成为一个孤儿进程由init 进程接管,然后运行结束,但是这种时候运行的是init的默认进程,与原有进程的功能无关
可以用pthread_detach将一个线程设置为detachd状态
exit会让线程退出,但是不会导致虚拟地址空间的释放
标签:joinable,僵尸,linux,主线,c++,线程,pthread,进程,多线程 From: https://www.cnblogs.com/uestc-du/p/16909272.html