The second part of the reason is that sigatomic_t is a type guaranteed to be accessible atomically. A 64-bit value on 32-bit x86, for example, is not; it takes two memory reads to get it, and a signal that modifies that value could be raised between the two instructions.