正确使用volatile sig_atomic_t

时间:2011-12-13 11:55:07

标签: c linux x86 c++11 signals

根据this站点,可以在信号处理程序中使用类型volatile sig_atomic_t的变量。现在我的问题是,例如下面的代码仍然是原子的,因此没有引入竞争条件?

假设我们使用的是多核处理器(编辑:运行多线程程序)。 volatile sig_atomic_t是否首先适用于多核系统,或者我们是否应该将atomic<unsigned int> C ++ 11用于多核系统上的信号处理程序(编辑:运行多线程系统程序)?

volatile sig_atomic_t a;

static void signal_handler(int sig, siginfo_t *si, void *unused)
{
  int b;
  ................
  b = ...;
  a = a | b;
  ................
}

1 个答案:

答案 0 :(得分:17)

除非您的程序是多线程的,否则信号处理程序永远不会与程序中的其他代码同时运行,并且它们肯定不会与它们中断的代码同时运行。只要在信号处理程序的持续时间内屏蔽了信号sig,您的代码就可以了。