C 更新全局变量时的屏蔽信号

C 更新全局变量时的屏蔽信号,c,signals,masking,signal-handling,C,Signals,Masking,Signal Handling,我知道我可以通过使用sau掩码来屏蔽处理程序执行时发出的信号。然而,我想知道在更新一些全局变量时如何屏蔽信号 另外,我想知道在执行特定的用户定义函数时如何屏蔽信号 有可能做到这两件事吗 任何帮助都将不胜感激 谢谢您可以随时拨打信号;要么将信号处理程序设置为某些自定义代码,要么通过将处理程序参数设置为NULL来清除它 当然,它提供了更细粒度的控制。您可以随时调用sigaction,例如,在更新全局变量之前 此链接可能有助于: 可以使用sigblock阻止信号。被阻塞的信号将排队,并在信号解除阻塞时

我知道我可以通过使用sau掩码来屏蔽处理程序执行时发出的信号。然而,我想知道在更新一些全局变量时如何屏蔽信号

另外,我想知道在执行特定的用户定义函数时如何屏蔽信号

有可能做到这两件事吗

任何帮助都将不胜感激


谢谢

您可以随时拨打信号;要么将信号处理程序设置为某些自定义代码,要么通过将处理程序参数设置为NULL来清除它

当然,它提供了更细粒度的控制。您可以随时调用sigaction,例如,在更新全局变量之前

此链接可能有助于:


可以使用sigblock阻止信号。被阻塞的信号将排队,并在信号解除阻塞时释放

然而,这是超级昂贵的。您必须执行一个系统调用以阻止,并执行一个系统调用以取消阻止。如果你经常这样做,这可能会很慢。因此,有一些替代方法:

如果您使用的是linux,请使用。您可以一次性阻止所有信号并将它们重定向到文件描述符,然后在安全的情况下处理它们。 否则,或者如果异步信号处理很重要,则可以在用户空间中延迟信号。在进入临界区之前,设置一个volatile标志。在信号处理器中,检查此标志;如果您看到它,请将信号号写入管道并立即返回。在信号处理器中,检查此管道上的信号,然后在该点重新提升信号。
在用户定义的函数执行期间阻塞信号如何?