1

我编写了一个用户空间应用程序,C其中使用插件库与低级 Linux 内核驱动程序交互plugin.so。我使用dlopen(). 我有一个信号处理程序,它在收到dlclose()时调用。SIGINT在代码审查之后,我得到了dlclose()不能从信号处理程序调用的反馈意见。如果是,为什么会这样?

4

1 回答 1

4

首先,因为dlclose()没有列在 POSIX 函数列表中,可以安全地在信号处理程序中调用。

这样做的原因主要是许多未在此处列出的函数可能会执行诸如分配内存等需要执行可能与信号处理程序存在竞争条件的事情。一个例子是持有一个锁,所以当信号到达当前持有属于 malloc/dlclose 或其他任何锁的线程中时,并且您调用该函数,那么锁已经被锁定,但永远不会被解锁,因为线程当前在信号处理程序中,并且没有“正常”执行。

于 2013-02-13T11:03:37.597 回答