问题描述
Linux的编程接口本书中提到的方法与异步信号在多线程程序进行处理:
Now the questions:
- when kernel wants to deliver signals it choose one of the threads inside process arbitrary. from where it can know to deliver signal to the dedicated thread?
- pthread API is non-aync-safe functions. so how we can use them inside signal handler?
When the kernel delivers a process-directed signal, it chooses one of the threads that does not have the signal blocked. This means that it never chooses any of the threads apart from the signal-handling thread (which acts like it has the signal unblocked while it is blocked in sigwaitinfo()
or similar). In other words: the kernel knows where to deliver the signal, because you have arranged things such that the signal-handling thread is the only thread that is ever allowed to deliver the signal to.
You do not use the pthreads API, or any non-async-signal-safe functions in a signal handler. The solution outlined does not handle the signals within signal handlers - it handles the signals within the normal execution flow of the signal-handling thread, after sigwaitinfo()
returns. This allows it to access non-async-signal-safe functions, which is the whole point.
这篇关于处理异步信号在多线程程序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!