线程基本操作 (4)线程清理函数
类似于进程的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)

运行结果:
