线程清理. 安排线程退出时需要调用的清理函数
例:
mypthread_cleanup.c
#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <errno.h> #include <pthread.h> //gcc -g mypthread_cleanup.c -o mypthread_cleanup -lpthread #define ERROR(flag,msg) \ if(flag) \ { \ printf("%d: ",__LINE__); \ fflush(stdout); \ perror(msg); \ exit(errno); \ } void clean(void *arg) { puts(arg); } void *pthread_func(void *arg) { pthread_cleanup_push(clean,"i'm cleaning 00000000000000000000"); pthread_cleanup_push(clean,"i'm cleaning 11111111111111111111"); sleep(100000); pthread_cleanup_pop(1); pthread_cleanup_pop(0); return NULL; } int main(int argc, char *argv[]) { pthread_t tid; int ret = pthread_create(&tid,NULL,pthread_func,NULL); ERROR(ret != 0,"pthread_create()"); sleep(1); pthread_cancel(tid); sleep(1); int stat; pthread_join(tid,(void **)&stat); printf("exit code = %d\n",stat); return 0; }
编译链接运行, 输出如下: