3

用 atexit() 注册的函数是最后执行的函数吗?是否可能此时其他线程仍在运行?

4

1 回答 1

4

用 atexit() 注册的函数是最后执行的函数吗?

atexit() 调用将在主线程执行完毕后在主线程中执行。除此之外,不作任何保证。

是否可能此时其他线程仍在运行?

是的,如果您没有采取措施在 main() 返回之前停止其他线程并 join() 它们。通常,您希望对所有线程进行显式、受控的关闭,因为 C(或 C++)运行时不会为您执行此操作,并且即使在 main() 线程退出时让它们继续运行也会引入这种可能性他们将尝试访问 main() 已作为其关闭序列的一部分释放的资源,这将调用未定义的行为(通常在程序关闭期间作为偶然的、不易重现的崩溃经历)

于 2016-04-07T22:11:33.863 回答