C++ 局部静态变量初始化在信号处理程序中是否安全(异步信号安全)?

C++ 局部静态变量初始化在信号处理程序中是否安全(异步信号安全)?,c++,thread-safety,static-variables,signal-handling,signalhandler,C++,Thread Safety,Static Variables,Signal Handling,Signalhandler,我想知道我可以在我的信号处理器中使用哪一个 void my\u signal\u处理程序(int-signo、siginfo\u t*info、void*arg){ 静态std::atomic_flag my_flag=atomic_flag_INIT; if(my_flag.test_和_set()){ ... }否则{ ... } ... } 或者使用std::atomic_标志作为全局静态变量: static std::atomic_flag my_flag=atomic_flag_IN

我想知道我可以在我的信号处理器中使用哪一个

void my\u signal\u处理程序(int-signo、siginfo\u t*info、void*arg){
静态std::atomic_flag my_flag=atomic_flag_INIT;
if(my_flag.test_和_set()){
...
}否则{
...
}
...
}
或者使用std::atomic_标志作为全局静态变量:

static std::atomic_flag my_flag=atomic_flag_INIT;
void my_signal_handler(int signo,siginfo_t*info,void*arg){
if(my_flag.test_和_set()){
...
}否则{
...
}
...
}

局部静态变量是在函数第一次被命中时初始化的,但是如果包含函数是一个信号处理程序,这里的问题是局部静态变量的初始化是否是异步信号安全的?因为MT安全在信号处理器环境中是不够的

请任何人都可以澄清这一点,提前感谢