Assuming your system uses signals in the form of POSIX (although this may fall under the “no exception” rule), then POSIX says:
During generation, it must be determined whether a signal is generated for the process or for a particular thread in the process. Signals that are generated by some action associated with a particular thread, such as a hardware error, must be generated for the thread that caused the signal to be generated.
This way you can handle SIGSEGV , SIGFPE , etc. based on pthread (but note that you can only set one signal handler function for the whole process). That way you can “protect” the process from stopping the dead crash in one pthread ... to the point. The problem, of course, is that it can be very difficult for you to say what state the process is in - failed pthread and all other pthreads. As a result of unsuccessful pthread, there may be several mutexes. Bad pthread can leave some common data structures in a mess. Who knows what things are in the club, unless pthreads are essentially independent. Perhaps you can arrange other pthreads to close "gracefully" ... instead of burning and burning. In the end, it may be safer to stop all pthreads dead, rather than trying to continue in some less clearly defined state. This will depend entirely on the nature of the application.
Nothing is anything ... threads can communicate with each other more easily than processes, and cost less to start and stop - processes are less vulnerable to other processes failing.
user3793679
source share