Signalhandlerfunktion in Multithread-Umgebung

In meiner Multithread-GUI-Anwendung habe ich den folgenden Signalbehandlungscode. Ich möchte diesen Code so verbessern, dass er korrekt und threadsicher ist, aber es gibt einige Dinge, die ich im Umgang mit Signalen nicht vollständig verstehe:

Wird das Signal auf Prozess- oder Thread-Ebene verarbeitet (kann ich threadspezifische Signal-Handler verwenden)?In welchem ​​Thread-Kontext wird die Funktion signal_handler ausgeführt?ist es möglich, in kurzer Zeit viele SIGTERM-Signale zu senden?Ist es sinnvoll, einen Mutex zu verwenden, um die parallele Ausführung von signal_handler zu verhindern?
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);
}

Ich registriere Signalhandler in meiner Init-Funktion:

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

Antworten auf die Frage(3)

Ihre Antwort auf die Frage