【发布时间】:2011-10-02 03:24:39
【问题描述】:
我知道我可以在处理程序执行时屏蔽信号(通过使用 sa_mask)。但是,我想知道在更新一些全局变量时如何屏蔽信号。
另外,我想知道在执行特定的用户定义函数时如何屏蔽信号。
这两件事可以做到吗?
任何帮助将不胜感激
谢谢
【问题讨论】:
标签: c signals masking signal-handling
我知道我可以在处理程序执行时屏蔽信号(通过使用 sa_mask)。但是,我想知道在更新一些全局变量时如何屏蔽信号。
另外,我想知道在执行特定的用户定义函数时如何屏蔽信号。
这两件事可以做到吗?
任何帮助将不胜感激
谢谢
【问题讨论】:
标签: c signals masking signal-handling
您可以随时调用“signal()”;要么 a) 将信号处理程序设置为一些自定义代码,要么 b) 通过将处理程序参数设置为 NULL 来清除它。
sigaction() 当然,可以为您提供更细粒度的控制。您也可以随时调用 sigaction(例如,在更新全局变量之前)。
此链接可能会有所帮助:
【讨论】:
可以使用sigblock() 阻止信号。当信号解除阻塞时,阻塞的信号会被排队释放。
但是 - 这非常昂贵。你必须做一个系统调用来阻塞和一个系统调用来解除阻塞。如果你经常这样做,这可能会很慢。所以有一些替代方法:
volatile 标志。在您的信号处理程序中,检查此标志;如果你看到它,write() 到 pipe 信号号并立即返回。在您的信号处理程序中,检查此管道上的信号,然后在该点重新raise 信号。【讨论】: