Met*_*est 14 c linux x86 signals c++11
根据这个站点,可以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;
................
}
Run Code Online (Sandbox Code Playgroud)
R..*_*R.. 17
除非您的程序是多线程的,否则信号处理程序永远不会与程序中的其他代码同时运行,并且它们肯定不会与它们中断的代码同时运行.只要信号sig
在信号处理程序的持续时间内被屏蔽,您的代码就可以了.