当我们的UNIX/C程序需要紧急出口时,我们使用exit(3)函数并安装atexit(3)处理程序以进行紧急清理.这种方法工作正常,直到我们的应用程序被线程化,此时atexit()处理程序停止工作可预测.
我们通过试验了解到一个错误,即线程可能已经死在atexit()处理程序中,并且它们的堆栈已经解除分配.
我没有在标准链接线程消失中找到引用atexit():从main()返回后线程停止存在,但它是在调用atexit()之前还是之后?Linux,FreeBSD和Mac上的实际操作是什么?
在多线程程序中是否有一个很好的紧急清理模式?