gpt4 book ai didi

c - 具有静态变量的信号处理程序中的竞争条件

转载 作者:太空宇宙 更新时间:2023-11-04 02:09:07 24 4
gpt4 key购买 nike

在单线程程序中,信号处理程序中是否可能出现竞争条件?

void signal_handler(...)
{
static int i = 0;
i = i + 10 * 10;
}

想象一下,抛出两个非常接近的信号,非常接近以至于它们同时进入函数。

我找不到有关最新 Linux 操作系统如何处理此问题的信息。我只知道两个信号都得到了正确处理,但我不知道如何处理。竞争条件是否可能?

感谢任何帮助,谢谢!

最佳答案

在您的意思(两个信号之间)的意义上,不存在竞争条件。同一信号的多个信号不会同时传送。 除非采取预防措施,否则可能会同时传送不同信号编号的多个信号,如 torek 的回答中所述。

每当涉及静态持续时间变量(或全局变量)时,您的函数可能不再可重入。这对于信号处理函数本身通常并不重要。但是,如果它调用其他一些访问全局或静态数据的函数,那么该函数将看到类似于两个线程在临界区中竞速的访问模式。也就是说,您的程序正在调用这样一个函数来执行其正常处理,但是信号到达该函数的中间,然后您的信号处理程序调用同一个函数。全局/静态变量可能处于不一致的状态,并可能导致您的程序具有不确定的行为。

POSIX 定义了一组可以从信号处理程序中安全调用的 API。当您计划让信号处理程序调用您实现的函数时,您的代码应该采取类似的预防措施。

关于c - 具有静态变量的信号处理程序中的竞争条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16823102/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com