// void pthread_cleanup_push(void (*routine)(void*), void *arg);
// void pthread_cleanup_pop(int execute);
//
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
static void cleanup_func(void *p)
{
puts(p);
}
static void *func(void *p)
{
puts("Thread is working!");
pthread_cleanup_push(cleanup_func,"cleanup:1");
pthread_cleanup_push(cleanup_func,"cleanup:2");
pthread_cleanup_push(cleanup_func,"cleanup:3");
//
// 实现方式为宏,并且以配对的形式出现
pthread_cleanup_pop(1);
pthread_cleanup_pop(1);
pthread_cleanup_pop(0);
//
pthread_exit(NULL);//先结束线程,不能调用清理处理程序
}
int main()
{
int err;
pthread_t tid;
puts("Begin!");
err = pthread_create(&tid,NULL,func,NULL);
if(err)
{
fprintf(stderr,"pthread_create():%s\n",strerror(err));
exit(1);
}
pthread_join(tid,NULL);
puts("End!");
exit(0);
}