在我的多线程GUI应用程序中,我有以下信号处理代码。我想提高这个代码,以便它会是正确的,线程安全的,但有一些事情,我不完全理解的信号处理:多线程环境中的信号处理函数
- 的信号在进程或线程级处理的(我可以有螺纹特定的信号处理程序)?
- 其中线程上下文是执行signal_handler函数吗?
- 是否可以在短时间内发送很多SIGTERM信号?
- 使用互斥锁来防止signal_handler的并行执行有意义吗?
void signal_handler(int sig)
{
switch (sig)
{
case SIGTERM:
::wxLogMessage(wxT("SIGTERM signal received ..."));
break;
case SIGINT:
::wxLogMessage(wxT("SIGINT signal received ..."));
break;
case SIGUSR1:
::wxLogMessage(wxT("SIGUSR1 signal received ..."));
break;
default:
::wxLogMessage(wxT("Unknown signal received ..."));
}
// send wxCloseEvent to main application window
::wxGetApp().GetTopWindow()->Close(true);
}
我注册信号处理程序在我的初始化函数:
// register signal handlers
signal(SIGTERM, signal_handler);
signal(SIGINT, signal_handler);
signal(SIGUSR1, signal_handler);
注意在信号处理程序中使用std :: atomic并不能保证无锁实现。请参阅:http://www.informit.com/articles/article.aspx?p = 2204014 – Corvusoft