функция обработчика сигнала в многопоточной среде
В моем многопоточном приложении GUI у меня есть следующий код обработки сигналов. Я хочу улучшить этот код, чтобы он был корректным и безопасным, но есть некоторые вещи, которые я не делаюt полностью понимаю в обработке сигналов:
обрабатывается ли сигнал на уровне процесса или потока (могу ли я иметь специфичные для потока обработчики сигналов)?в каком контексте потока выполняется функция 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);