根据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;
................
}
答案 0 :(得分:17)
除非您的程序是多线程的,否则信号处理程序永远不会与程序中的其他代码同时运行,并且它们肯定不会与它们中断的代码同时运行。只要在信号处理程序的持续时间内屏蔽了信号sig
,您的代码就可以了。