pthread_cleanup_push的使用
该函数为当前的线程注册一个清理回调函数,清理函数在使用push的时候压入线程的一个栈中。
那么该清理函数何时会被调用呢?
记住,pthread_cleanup_push必须和pthread_cleanup_pop同时使用。
当push后,在线程退出前使用pop,便会调用清理函数。
pthread_cleanup_pop有一个参数,如果在最后调用pop时该参数赋值为0,则表示只是从栈中取出该清理函数,却并不会调用该清理函数。
还有一种情况,就是在push和pop之间线程的退出。如果使用return退出线程,那么不会调用清理函数,如果是使用pthread_exit函数退出线程会调用清理函数。
总结为以下四种情况
情况一
push
pop(非0)
// 调用清理函数
情况二
push
pop(0)
// 不会调用清理函数
情况三
push
return // 不会调用清理函数
pop
情况四
push
pthread_exit // 调用清理函数
pop