完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
线程终止:
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: 编译:gcc cancel.c -o cancel -lpthread,运行结果: 使用pthread_exit让线程退出,pthread_join回收线程资源,代码在/thread/exit/目录下, 线程依次使用pthread_exit退出,然后pthread_join依次回收线程,main.c: 编译运行,可以看到线程按顺序依次退出并打印pthread_exit的返回值: 实验三: 使用pthread_detach()设置线程分离,pthread_exit()退出后,系统自动回收,最后调用pthread_join()发现报错,说明线程分离后线程自动释放。 实验代码在detach.c:路径为:11_Linux系统开发进阶/Linux系统编程_章节使用资料。 编译,gcc -o detach detach.c -lpthread,运行结果如下,发现使用pthread_join()报错: |
|
|
|
只有小组成员才能发言,加入小组>>
692 浏览 0 评论
1106 浏览 1 评论
2473 浏览 5 评论
2808 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2646 浏览 6 评论
使用eim外接fpga可是端口一点反应都没有有没有大哥指点一下啊
653浏览 9评论
649浏览 7评论
请教大神怎样去解决iMX6Q在linux3.0.35内核上做AP失败的问题呢
781浏览 6评论
628浏览 5评论
668浏览 5评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 01:20 , Processed in 1.026091 second(s), Total 80, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号