Función de manejador de señales en entornos multihilo.

En mi aplicación de GUI multiproceso tengo el siguiente código de manejo de señal. Quiero mejorar este código para que sea correcto y seguro, pero hay algunas cosas que no entiendo completamente en el manejo de señales:

¿Se maneja la señal en el proceso o en el nivel de subproceso (puedo tener manejadores de señal específicos de subproceso)?¿En qué contexto de hilo se ejecuta la función signal_handler?¿Es posible enviar muchas señales SIGTERM en poco tiempo?¿Tiene sentido usar un mutex para evitar la ejecución 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);
}

Registro los manejadores de señales en mi función de inicio:

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

Respuestas a la pregunta(3)

Su respuesta a la pregunta