在Linux中,线程有两种状态:joinable和unjoinable。
- joinable状态:默认是这种状态,线程运行结束之后堆栈空间和线程描述符并不会释放,需要让另一个线程调用pthread_join函数来回收本线程所占有的资源。而当一个线程调用pthread_join函数时,它会阻塞直到它所等待的线程运行结束再回收资源并返回。
- unjoinable状态:这个状态下,线程运行结束后会自动把线程所占有的资源释放掉,不需要让另一个线程去调用pthread_join函数。而让一个线程的状态变成unjoinable的一个方法就是调用pthread_detach函数,参数是线程的标识符,可以由创建新线程的函数来调用;也可以让新线程自己来调用,如果是线程自己调用的话参数设为pthread_self函数就行。