我一直在尝试理解 POSIX 线程和 POSIX 信号交互的复杂性。特别是,我感兴趣的问题有:
- 控制信号传递到哪个线程是最好的方式(假设它在第一时间不是致命的)?
- 告诉另一个可能很忙的线程信号已经到达,什么是最好的方式?(我已经知道从信号处理程序中使用 pthread 条件变量是一个坏主意。)
- 如何安全地处理将信号发生的信息传递给其他线程?这需要在信号处理程序中进行吗?(通常情况下,我不想结束其他线程;我需要更加微妙的方法。)
为了参考,我正在研究如何转换 TclX 包以支持线程,或者将其分解并至少使某些有用部分支持线程。信号是其中特别感兴趣的一部分。
sigwaitinfo()
(或sigtimedwait()
)上循环,然后按照最后一段所述将它们分派到应用程序的其余部分。 - caf