função de manipulador de sinal no ambiente multithread

No meu aplicativo GUI multithreaded eu tenho o seguinte código de manipulação de sinal. Eu quero melhorar este código para que ele seja correto e seguro, mas há algumas coisas que eu não entendo completamente no tratamento de sinal:

é sinal tratado no processo ou nível de thread (posso ter manipuladores de sinal específicos de thread)?em qual contexto do thread a função signal_handler é executada?é possível enviar muitos sinais SIGTERM em um curto período de tempo?faz sentido usar um mutex para impedir a execução paralela de 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);
}

Eu registro manipuladores de sinal na minha função init:

// register signal handlers
signal(SIGTERM, signal_handler);
signal(SIGINT,  signal_handler);
signal(SIGUSR1, signal_handler);

questionAnswers(3)

yourAnswerToTheQuestion