开发者学堂课程【物联网开发- Linux 高级程序设计全套视频:Pthred_detach 线程分离】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/660/detail/11061
Pthred_detach 线程分离
内容介绍:
一、定义
二、线程分离特点
三、结构
四、验证
一、定义
创建一个线程后应回收其资源,可以通过 pthread_join 等待线程结束,回收其资源。
或者等进程结束,系统会回收其资源,如果进程不结束,而且也没有join,那么线程资源不会被回收。但使用 pthread_join 函数会使调用者阻塞,故Linux提供了线程分离函数 pthread_detach。
二、线程分离特点
一旦使线程分离,线程依旧依赖于进程存在,只不过不需要使用join,在进程没有结束的时候,系统会自动回收其资源。
三、结构
1.#include
Int pthread_detach(pthread_t,thread)
若进行线程分离,那么他的参数就是线程号。
2.功能:
使调用线程与当前进程分离,使其成为一个独立的线程,该线程终止时,系统将自动回收它的资源。不需要join,进程也不需要结束的时候就可以回收已经结束的线程资源
3.参数:
thread:线程号
一旦将线程分离后,pthread_join 就不再阻塞。
4.返回值:
成功:返回 0,失败返回非 0。
四、验证
1. 在 main 函数中,创建了一个线程,线程号被保存在 tid1 中,thead 是线程函数,创建好线程后,将其分离。在设置 join 等待线程结束。
2. 线程1做的事情是:
for循环五次,每次循环一秒打印1条提示信息。
如果没有分离,join会等5秒,等待线程结束后会after join,再次等待三秒,程序才结束。以下为去掉分离后的结果。
3.如果添加线程分离,join不阻塞。以下为添加分离得出结果,直接结束join,等待三秒结束程序。
4. 以上说明:
即使线程分离了,但还是依赖于进程存在的。
5. 将等待时间改为10秒在结束程序,那线程就可以结束了。5秒之后结束,自动回收资源,过完10秒结束程序,5-10s的时候线程资源已经被自动回收。以下为输出结果。