找回密码
 注册
关于网站域名变更的通知
查看: 372|回复: 1
打印 上一主题 下一主题

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

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2021-3-8 15:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
线程终止:
& ~. P) Y& H" J4 U; r! G. C# w1.start_routine回调函数执行return;
8 e- k6 D0 F7 S9 _2.线程自身调用pthread_exit();
  d7 \1 W- J" Z) {, k* j3.其他线程调用pthread_cancel(ID)将此进程终止;$ ^; E" V& {5 `4 R+ M
任意线程调用exit()使整个进程退出。
: K  o9 }7 k5 T8 t3 n7 @- t
5 f4 g6 f$ n( x  m; j线程回收:线程默认joinable状态,终止后需使用pthread_join回收资源;将子线程使用pthread_detach从主线程分离后处于unjoinable状态,系统等线程退出后自动回收资源。' P5 u: L* \: H* V/ w5 v. g6 a
常用的 函数调用如下:1 J8 o1 J5 M8 V  Y
pthread_exit():结束本线程
- H: b9 [! V2 {8 g9 n% p  B  p#include9 i3 a: Y: E( h& Q2 Q; \3 B
void pthread_exit(void *retval);
% B: L; T6 b! s9 d% q参数含义:
# y  O1 U( l/ aretval:线程返回值,其他线程调用pthread_join()接收。; G$ f+ J7 v8 ]  K; o- W* b+ I
! s1 B9 t, A8 N; u* ]
pthread_cancel():向指定线程发出取消请求,使用pthread_join回收,+ @, P9 q, o. x  r+ q6 U" O1 J
#include
+ C0 M6 J0 B, z9 uint pthread_cancel(pthread_t thread);, W# a* o' F7 i. l; @7 q( P# _% `. C
参数含义:
1 t1 d" d0 D7 C& j: f. }1 pthread:要终止的线程ID;! B/ s, }  O3 u4 `4 |2 A8 a
返回值:执行成功返回0,成功不一定会让指定线程终止;执行失败返回错误号,7 ]7 @: I$ d8 S

5 l. W( q5 R7 O. Upthread_join():等待线程终止回收资源,获取返回值retval,' h! R0 t1 z' K) {3 b0 Q8 Z. [) k
#include
! Y9 t' k% x+ @1 d/ u' Q3 ]int pthread_join(pthread_t thread, void **retval);
: o0 W3 v7 i5 M: G参数含义:6 J, o- }. ~: e8 k; F2 _
thread:线程 ID。% E+ p3 c3 B. @9 M( h+ e
retval:存放回收线程的返回值。
/ ^# {# b9 O9 Y& g6 u返回值:成功返回0,失败返回错误号。
) H$ i$ j" M4 G) l3 V5 {
( i# i6 [- U5 ^pthread_detach():分离线程,线程终止后系统自动清理,分离后不能再使用join获取状态,) \- M, s( W+ j  a( _
#include' @# g$ w  r+ X6 j6 s
int pthread_detach(pthread_t thread);3 E% b; c$ F) k/ _, m+ e% m
参数含义:要分离的线程 ID。- f2 W9 b2 @4 |0 |9 _1 l
返回值:成功返回0,失败返回错误号。% g0 ~& t1 S2 h' v+ v8 p
本章代码在thread/目录下,实验1:路径为:11_Linux系统开发进阶\Linux系统编程_章节使用资料。
; B0 o; J: ]8 c- _使用pthread_cancel让线程退出,pthread_join回收,代码在cancel.c:
& {, k9 {* J4 P' P) q4 u" H' c
8 J& h. _' [! f/ Q% D编译:gcc cancel.c -o cancel -lpthread,运行结果:
+ P2 O+ D& H+ a6 L% W) I9 \" z1 X! j  W, Z0 f& }. H4 X
使用pthread_exit让线程退出,pthread_join回收线程资源,代码在/thread/exit/目录下,
  b4 u' N' e" C3 m( }( X线程依次使用pthread_exit退出,然后pthread_join依次回收线程,main.c:4 `) S; |$ U$ h

- p% S% e+ Y; }' p3 E0 f2 d& l7 B6 V编译运行,可以看到线程按顺序依次退出并打印pthread_exit的返回值:
, J! i- s7 w' _
- Y$ T* B" N; g4 v+ u实验三:' o  q, Z& V. H$ s/ v. ]
使用pthread_detach()设置线程分离,pthread_exit()退出后,系统自动回收,最后调用pthread_join()发现报错,说明线程分离后线程自动释放。
- m# I/ i2 Z" ~8 _8 u  ]2 K实验代码在detach.c:路径为:11_Linux系统开发进阶\Linux系统编程_章节使用资料。
5 t, Y! X5 q$ V7 J& w! `9 l- @. J  m2 F: D

2 n4 g5 C! ^2 a$ i' X' g编译,gcc -o detach detach.c -lpthread,运行结果如下,发现使用pthread_join()报错:4 K; A5 o- Y- m0 o
( C" ]8 [& Y$ h# c5 t

该用户从未签到

2#
发表于 2021-3-10 11:09 | 只看该作者
                                          
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-24 19:01 , Processed in 0.187500 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表