信号处理程序内部的变量更新永远不会更新

时间:2011-07-03 17:15:57

标签: c linux handler signals

在信号处理程序中,我正在改变变量的值。但是,即使我已将变量 leader_barrier 声明为 sig_atomic_t ,该程序也从未注意到更新。

void timer_action(int signum)
{   
static int count = 0;

 if ( !(*pbarrier_in_proc) && !(leader_barrier) && !(*pno_more) )
  leader_barrier = 1;
}

确认 timer_action 确实执行了,而 leader_barrier 确实在其中变为1,正如我在信号处理程序中打印其值所看到的那样。

2 个答案:

答案 0 :(得分:5)

您应将leader_barrier声明为volatile sig_atomic_t,而不只是sig_atomic_t。否则,编译器可以自由地假设变量不会异步更改。也就是说,它可以在函数的开头读取一次(比如说),假设没有其他函数可以改变leaderboard被调用,则不需要再次读取它。

答案 1 :(得分:0)

也许这两个变量不是同一个变量。尝试在信号处理程序和其他相关代码中打印它们的地址。