- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
例如:
假设我在 main() 中有一个处理计时器警报的信号处理程序。我还有 main 创建的工作线程,它们没有这个信号处理程序,因为信号所需的逻辑包含在 main 中。我相信这将是一个问题,因为如果发送信号时其中一个工作线程当前正在运行,它将捕获信号并且没有所需的信号处理程序来处理它。但是,在每个可能的上下文中包含每个相关的自定义信号处理程序的定义似乎有些矫枉过正。我错过了什么吗?
最佳答案
Say I have a signal handler in main() that handles a timer alarm.
不,你不知道。信号处理程序是一个函数,对于一个函数可以在另一个函数中,C 没有任何意义。
I also have worker threads that main creates, which do not have this signal handler because the logic required for the signal is contained in main.
信号处置(包括自定义处理程序)是进程范围的属性。您不能在同一进程的不同线程中对同一信号有不同的处置。此外,不,处理信号的逻辑在它的信号处理程序中,如果它有一个,或者在内核中,如果没有。进程可用的功能也是每个进程的属性,而不是每个线程的属性。
I believe this will be a problem, because if one of the worker threads is currently running when the signal is sent, it will catch the signal and not have the required signal handler to handle it.
不一定,也不是。
每个线程都有自己的信号掩码,它控制哪些信号可以传递给它。线程从其父线程继承其信号掩码,随后可以通过 pthread_sigmask()
函数修改该掩码。通过这种方式,您可以控制信号处理程序在哪个线程中运行,至少同样重要的是,哪些线程可以被信号中断,因此信号不一定会被传送到您的工作线程。
但也没有,正如我已经讨论过的,在任何情况下,单个线程都没有单独的信号处理程序。每个线程都拥有进程拥有的所有信号处理程序,因为它们属于进程,而不属于单个线程。
But it seems like overkill to include definitions of every single relevant custom signal handler in every possible context. Am I missing something?
是的。我不确定您到底遗漏了哪些部分,但请参阅上文。
关于c - 信号处理程序是否需要包含在流程中的每个可能上下文中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53622469/
我是一名优秀的程序员,十分优秀!