That friend of all C programmers, errno , is a global variable that is commonly set by library functions to indicate what went wrong during a function call. If two threads call functions which both set errno to different values, at least one of the threads is going to get the wrong information. This is solved by having thread-specific data areas for errno , rather than one global variable used by all threads. Many people find signal handling in C to be a bit tricky at the best of times. A quick re-cap of what signals are.
Signals are the system's way of informing a process about various events.
There are two types of signals, synchronous and asynchronous. Synchronous signals are a result of a program action. Asynchronous signals are independent of the program. For example, the signal sent when the user gives the kill command. If you choose the first option, then signals will have some default behavior.