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

Met*_*est 0 c linux signals handler

在信号处理程序中,我正在改变变量的值.但是,程序从未注意到更新,即使我已将变量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;
}
Run Code Online (Sandbox Code Playgroud)

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

and*_*ski 5

你应该申报leader_barriervolatile sig_atomic_t,不只是sig_atomic_t.否则,编译器可以自由地假设变量不会异步更改.也就是说,它可以在函数的开头读取一次(比如说),假设没有其他可以改变的函数leaderboard被调用,它就不需要再次读取它.