欢迎光临散文网 会员登陆 & 注册

线程基本操作 (4)线程清理函数

2022-10-28 10:00 作者:GXTon_阿通  | 我要投稿

类似于进程的atexit()
在线程运行完之后,如果想要在线程退出时,执行某个操作.
就可以用到线程清理函数.

与进程不同的是,线程可以注册多个清理函数.
这些清理函数会记录在线程的栈中.
栈是先进后出.所以注册顺序和执行顺序是相反的.

下面是添加和移除清理函数的函数:

pthread_cleanup_pop()可以清除栈中最顶层的,也就是最后添加的清理函数.


触发线程清理函数执行的条件:
1,线程调用了pthread_exit()退出时;
2,线程响应了取消请求时;
3,用非0参数调用pthread_cleanup_pop();
(pthread_cleanup_pop()的参数如果传入的是0,那么清理函数不会被调用,而是被移除; 如果参数为非0,那么就会调用清理函数;)

pthread_clean_push()和pthread_cleanup_pop()虽然是函数,但是他们是用宏实现的.
其中分别包含 { 和 },所以两个"函数"需要成对实现.


例子:

对上面代码进行编译,

编译方法一:可以使用 gcc -o main main.c -lpthread

编译方法二:可以使用make,(前提是编写一个makefile)

运行结果:


线程基本操作 (4)线程清理函数的评论 (共 条)

分享到微博请遵守国家法律