线程清理处理程序:
void pthread_cleanup_push(void (*routine)(void*),void *arg);
//通过这个函数注册线程处理函数,即将routine放入栈中;arg为routine的参数;
void pthread_cleanup_pop(int execute);
//该函数的作用是:将pthread_cleanup_push放入栈中的函数指针取出,并让其执行;
但是要注意两种情况,
(1)当execute!=0的时候,线程清理函数一定会执行,因为是从栈中拿数据,所以处理函数的顺序会与pthread_cleanup_push注册的函数的顺序相反.
(2)当execute=0的时候,如果在pthread_cleanup_push和pthread_cleanup_pop之间没有调用pthread_exit()或有取消点的pthread_cancel()的时候,这时候仅仅是将函数指针从栈中取出来,而不会去执行.相反的话,即使execute=0还是会去