摘要:
线程可以安排它退出时需要调用的函数,这样的函数称为线程清理处理程序,线程可以建立多个清理处理程序。处理程序记录在栈中,也就是说它们的执行顺序与它们注册时的顺序相反。它主要用来处理内存泄露,尤其是处理死锁。 pthread_cleanup_push来注册清理函数rtn,这个函数有一个参数arg。在以下三种情形之一发生时,注册的清理函数被执行: 1)调用pthread_exit。 2)作为对取消线程请求(pthread_cancel)的响应。 3)以非0参数调用pthread_cleanup_pop。 注意: 1)如果线程只是由于简单的返回而终止的,则清除函数不会被调用... 阅读全文
摘要:
_exit():跟exit功能大致相同,区别在于_exit不会清空所有缓冲区,关闭所有I/O通道exit():在调用时,会做大部分清理工作,但是决不会销毁局部对象,因为没有stack unwinding。会进行的清理工作包括:销毁所有static和global对象,清空所有缓冲区,关闭所有I/O通道。终止前会调用经由atexit()登录的函数,atexit如果抛出异常,则调用terminate()。abort():调用时,不进行任何清理工作。直接终止程序。retrun:调用时,进行stack unwinding,调用局部对象析构函数,清理局部对象。如果在main中,则之后再交由系统调用exit 阅读全文