2016-09-16 64 views

回答

3

这些天来,它可能是更好的短语作为这些普通信号语义与实时信号语义。

在一些早期的UNIX系统中,信号是不可靠的,因为它们可能会“丢失”,因为没有设施来阻止信号(以使它们等待)。例如,在检查由信号处理程序设置的wake_up_flag之后,如果信号在检查后立即到达,但在暂停()之前到达,则可能会错过唤醒指令的代码将要调用暂停()。信号阻塞和sigpause()是对这种情况的可靠改进。

此外,信号的语义()意味着在进入处理程序时用户定义的信号处理程序被重置为SIG_DFL。然后,通常的技术是立即在信号手柄内重新安装用户定义的配置。但是,由于信号不能被阻挡,这就意味着存在竞争状态,程序可能再次被发信号并遭受SIG_DFL的后果。在现代系统中,sigaction()可靠地解决这种情况。因此,“可靠”的信号是我们当今大多数人认为是普通信号语义的东西。 (对于这里的更多信息,我建议你高级编程UNIX环境由Stephens和拉戈,特别是第10.4节“不可靠信号”)

POSIX realtime signals添加了一些功能,在普通的信号,例如,一个新的范围用于应用目的的信号(SIGRTMIN ... SIGRTMAX),排队等待信号的能力以及用信号传送数据字的能力。