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