[英]What does the POSIX standard say about thread stacks in atexit() handlers? What's the OS practice?
[英]What's the scenario to use atexit function?
CRT函数atexit()
可以在main
函数返回后注册一个函数来运行。 我想知道使用它的典型场景是什么? 是( atexit
)真的有必要吗?
我猜它的主要用途是当你无法控制main
,你想确保在它结束时调用某些东西。
它有时被库使用,它们不希望在终止程序之前,用户程序明确地调用它们的清理函数。
它也用于凤凰单身模式(参见Andrei Alexandrescu的Modern C ++ Design)。
它可以用于您需要执行的任务,每当应用程序关闭时。 通过使用它,您不需要在代码中找到的每个exit()之前添加所有清理代码来膨胀您的代码。
一些用例:
atexit
的主要用途之一是库在程序退出时执行清理。 请注意,调用exit
会调用atexit
, 而不是在程序中止或崩溃时调用,因此您无法对断言失败等进行清理。 如果程序调用exec
也不会调用它。
如果你想要的话,你可以直接在主程序中调用它,如果你有一个可能因某种原因调用exit的库。
请注意,您只能注册有限数量的atexit
处理程序,其中“limited”取决于您的操作系统,因此它会返回错误状态。
它为C程序提供了类似的能力,可以在C ++中调用静态变量的析构函数。
我用它来删除临时文件,或者(一次或两次)重置一些硬件寄存器。 通常没有必要使用它来关闭文件或释放内存,因为操作系统会为你做这件事。
在编写库时...想象一下在崩溃时将堆栈保存在预定义路径上(或邮件跟踪)的库。
编辑 - 正如评论中提到的,这个答案是错误的。 不读它。 太晚了。
可以在atexit()中处理异常.Assume多进程环境。 有一个物理可用的硬件资源。 任何一个进程都可以一次使用该h / w。 现在process1获取了h / w资源,并且在处理process1之后没有释放h / w资源。 为了释放h / w资源,可以使用此atexit(),以便process2可以有效地获取h / w。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.