迅为i.MX6ULL终结者线程基础线程终止与回收

发布时间:2021-3-8 15:37    发布者:落风
线程终止:
1.start_routine回调函数执行return;
2.线程自身调用pthread_exit();
3.其他线程调用pthread_cancel(ID)将此进程终止;
任意线程调用exit()使整个进程退出。

线程回收:线程默认joinable状态,终止后需使用pthread_join回收资源;将子线程使用pthread_detach从主线程分离后处于unjoinable状态,系统等线程退出后自动回收资源。
常用的 函数调用如下:
pthread_exit():结束本线程
#include
void pthread_exit(void *retval);
参数含义:
retval:线程返回值,其他线程调用pthread_join()接收。

pthread_cancel():向指定线程发出取消请求,使用pthread_join回收,
#include
int pthread_cancel(pthread_t thread);
参数含义:
thread:要终止的线程ID;
返回值:执行成功返回0,成功不一定会让指定线程终止;执行失败返回错误号,

pthread_join():等待线程终止回收资源,获取返回值retval,
#include
int pthread_join(pthread_t thread, void **retval);
参数含义:
thread:线程 ID。
retval:存放回收线程的返回值。
返回值:成功返回0,失败返回错误号。

pthread_detach():分离线程,线程终止后系统自动清理,分离后不能再使用join获取状态,
#include
int pthread_detach(pthread_t thread);
参数含义:要分离的线程 ID。
返回值:成功返回0,失败返回错误号。
本章代码在thread/目录下,实验1:路径为:11_Linux系统开发进阶\Linux系统编程_章节使用资料。
使用pthread_cancel让线程退出,pthread_join回收,代码在cancel.c:
1.jpg
编译:gcc cancel.c -o cancel -lpthread,运行结果:
2.jpg
使用pthread_exit让线程退出,pthread_join回收线程资源,代码在/thread/exit/目录下,
线程依次使用pthread_exit退出,然后pthread_join依次回收线程,main.c:
3.jpg
编译运行,可以看到线程按顺序依次退出并打印pthread_exit的返回值:
4.jpg
实验三:
使用pthread_detach()设置线程分离,pthread_exit()退出后,系统自动回收,最后调用pthread_join()发现报错,说明线程分离后线程自动释放。
实验代码在detach.c:路径为:11_Linux系统开发进阶\Linux系统编程_章节使用资料。
5.jpg
6.jpg
编译,gcc -o detach detach.c -lpthread,运行结果如下,发现使用pthread_join()报错:
7.jpg

本文地址:https://www.eechina.com/thread-761723-1-1.html     【打印本页】

本站部分文章为转载或网友发布,目的在于传递和分享信息,并不代表本网赞同其观点和对其真实性负责;文章版权归原作者及原出处所有,如涉及作品内容、版权和其它问题,我们将根据著作权人的要求,第一时间更正或删除。
您需要登录后才可以发表评论 登录 | 立即注册

厂商推荐

  • Microchip视频专区
  • Dev Tool Bits——使用MPLAB® Discover浏览资源
  • Dev Tool Bits——使用条件软件断点宏来节省时间和空间
  • Dev Tool Bits——使用DVRT协议查看项目中的数据
  • Dev Tool Bits——使用MPLAB® Data Visualizer进行功率监视
  • 贸泽电子(Mouser)专区
关于我们  -  服务条款  -  使用指南  -  站点地图  -  友情链接  -  联系我们
电子工程网 © 版权所有   京ICP备16069177号 | 京公网安备11010502021702
快速回复 返回顶部 返回列表