All'inizio del main scrivi:
Codice:
void die (int signal)
{
// segnaliamo in qualche modo ai thread che devono uscire
for (i = 0; i < n_threads; i++)
pthread_join();
exit(signal);
}
int main(void)
{
signal(SEGFAULT, die);
signal(SIGPIPE, die);
signal(SIGxxx, die);
[...]
die(0);
}
I miei programmi di solito non terminano mai con exit(), ma appunto con die() che quindi ha la doppia funzione di uscita fatale e uscita con successo... sempre il clean up debbo fare.
Detto questo in C l'interazione tra thread e segnali è un po' complessa per esempio anche se la logica dice che il sighandler dovrebbe essere eseguita dal main thread questo non è garantito potrebbe eseguirlo un thread a caso o quello che è andato in core!
Una possibilità per fare clean up nei thread che sono i "proprietari" delle risorse è usare il costrutto pthread_cleanup_push() / pthread_cleanup_pop():
http://man7.org/linux/man-pages/man3...up_push.3.html
Insomma auguri

!