Nella mia applicazione GUI multithread ho il seguente codice di gestione del segnale. Voglio migliorare il codice in modo che sarà corretto e filettatura sicura ma ci sono alcune cose che non capiscono fino in fondo nella gestione del segnale:Funzione di gestione del segnale in ambiente multithreading
- è il segnale gestite a livello di processo o thread (posso avere filo - gestori di segnali specifici)?
- in quale contesto di thread è eseguita la funzione signal_handler?
- è possibile inviare molti segnali SIGTERM in breve tempo?
- ha senso utilizzare un mutex per impedire l'esecuzione parallela di 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);
}
mi iscrivo gestori di segnale nella mia funzione init:
// register signal handlers
signal(SIGTERM, signal_handler);
signal(SIGINT, signal_handler);
signal(SIGUSR1, signal_handler);
L'utilizzo di note di std :: atomic nei gestori di segnale non garantisce implementazioni senza lock. Si prega di consultare: http://www.informit.com/articles/article.aspx?p=2204014 – Corvusoft