funkcja obsługi sygnału w środowisku wielowątkowym

W mojej wielowątkowej aplikacji GUI mam następujący kod obsługi sygnału. Chcę poprawić ten kod, aby był poprawny i bezpieczny dla wątków, ale są pewne rzeczy, których nie rozumiem w pełni w obsłudze sygnałów:

czy sygnał jest obsługiwany na poziomie procesu lub wątku (czy mogę mieć specyficzne dla wątku procedury obsługi sygnałów)?w którym kontekście wątku jest wykonywana funkcja signal_handler?czy można wysłać wiele sygnałów SIGTERM w krótkim czasie?czy sensowne jest użycie muteksu, aby zapobiec równoległemu wykonaniu obiektu 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);
}

Rejestruję procedury obsługi sygnałów w mojej funkcji inicjującej:

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

questionAnswers(3)

yourAnswerToTheQuestion