首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >atexit()函数

atexit()函数
EN

Stack Overflow用户
提问于 2012-05-22 21:24:48
回答 2查看 1.7K关注 0票数 2

有几个教程解释了atexit()函数的用法,例如:

http://linux.die.net/man/3/atexit

示例以易于理解的main函数形式给出。但是,我在我的程序中创建了一个共享库,并且我提供了一些从其他程序导出的函数。当另一个程序卸载我的共享库时,我想停止共享库中的一些线程。我如何在我的共享库实现中使用atexit(),而不强制用户在最后调用某些函数,例如destroy()

提前谢谢。

EN

回答 2

Stack Overflow用户

发布于 2012-05-22 21:29:18

documentation声明:

从glibc 2.2.3开始,可以在共享库中使用atexit() (和on_exit(3))来建立在卸载共享库时调用的函数。

另一方面,为什么不创建一个全局作用域的对象,并在其析构函数中执行整理代码?

票数 7
EN

Stack Overflow用户

发布于 2012-05-22 21:36:58

你应该避免这样做(除非你真的因为一些非常强烈的原因而必须这样做)。

lib应该只提供函数,并让应用程序自由使用它。如果您的库导出了一个启动了一些帮助线程的函数,那么还应该提供一个函数来停止它并对其进行适当的文档记录。保留应用程序释放其分配的资源的责任。

如果你的想法是修复有but的程序,这些程序确实调用了一些lib_init(),但是忘记了lib_uninit(),那么就忘了它吧。它会让你的lib变得更加复杂,而且你永远无法修复应用程序中所有潜在的bug。程序员可以创建,而调试这样的应用程序将变得更加困难。

IMHO,库应该(尽可能)避免更改一些全局进程的东西,因为这样的库会限制应用程序的设计。这样的库是噩梦,特别是当你链接到多个库,并且它们有矛盾的假设应该如何编写应用程序时。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10702980

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档