gpt4 book ai didi

c++ - 为什么不能从信号处理程序调用 dlclose()?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:39:56 24 4
gpt4 key购买 nike

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

最佳答案

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

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

关于c++ - 为什么不能从信号处理程序调用 dlclose()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14851995/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com