функция обработчика сигнала в многопоточной среде

В моем многопоточном приложении 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);

Ответы на вопрос(3)

Ваш ответ на вопрос