내 멀티 스레드 GUI 응용 프로그램에서 다음 신호 처리 코드가 있습니다. 나는 그것이 안전 올바른 및 스레딩 될 수 있도록이 코드를 향상시키고 자하지만, 신호 처리에 내가 완전히 이해하지 않는 몇 가지가 있습니다 :다중 스레드 환경에서 신호 처리기 기능
- 신호 내가 스레드를 가질 수 있습니다 (프로세스 또는 스레드 수준에서 처리됩니다 특정 신호 처리기)?
- 여기서 스레드 컨텍스트는 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); }
나는 나의 init 함수에 신호 핸들러를 등록 :
// register signal handlers
signal(SIGTERM, signal_handler);
signal(SIGINT, signal_handler);
signal(SIGUSR1, signal_handler);
신호 처리기에서 std :: atomic을 사용한다고해서 lock-free 구현이 보장되는 것은 아닙니다. 참조하십시오 : http://www.informit.com/articles/article.aspx?p=2204014 – Corvusoft