![]() |
1
44
正如@zoli2k所指出的,显式地指定一个线程来处理您想要处理的所有信号(或一组具有特定信号责任的线程),这是一种很好的技术。
我不会说“最好”,但我的建议是:
封锁所有需要的信号
最简单的方法是让线程在循环中接受信号,使用
或者,特殊线程可以允许将信号传递到信号处理程序,只有在准备好处理信号时才能取消对传递的屏蔽。(通过处理程序传递信号比通过
(
更新
@卡夫正确地指出
|
![]() |
2
13
根据POSIX标准,所有线程都应该在系统上显示相同的PID并使用
由于每个PID只允许定义一个信号处理程序,所以我更喜欢在一个线程中处理所有信号并发送
在一些较旧的系统上,由于缺少适当的内核支持,正在运行的线程可能具有与父线程的PID不同的PID。参见常见问题解答,了解信号处理 linuxThreads on Linux 2.4 。 |
![]() |
3
4
imho、unix v信号和posix线程不能很好地混合。 Unix V是1970年的。posix是1980年;) 有取消点,如果您允许信号和pthreads在一个应用程序中,您最终将围绕每个调用编写循环,这会意外地返回eintr。 因此,在我必须在Linux或QNX上编写多线程程序的(少数)情况下,我所做的就是屏蔽所有(除了一个)线程的所有信号。 当一个unix v信号到达时,进程切换堆栈(在unix v中,这与在进程中获得的并发性一样多)。 正如这里的其他帖子提示的那样,现在可以告诉系统哪个POSIX线程将成为堆栈切换的受害者。 一旦,您成功地使信号处理程序线程工作,问题仍然存在,如何将信号信息转换为文明的东西,其他线程可以使用。需要线程间通信的基础结构。一种模式非常有用,它是参与者模式,其中每个线程都是一些进程内消息传递机制的目标。 因此,您不应该取消其他线程或杀死它们(或其他奇怪的东西),而是尝试将信号从信号上下文整理到信号处理程序线程,然后使用参与者模式通信机制向需要该信号的参与者发送语义上有用的消息。相关信息。 |
![]() |
4
3
到目前为止我所处的位置:
我还得整理一下
|
![]() |
Arman · django m2m\u已更改不工作 6 年前 |
![]() |
Kev · Python中的信号频率滤波 7 年前 |
![]() |
Giorgi Cercvadze · 如何将暂停的进程设置为后台? 7 年前 |
![]() |
miXo · 如何使用整数除法降低采样率? 7 年前 |