Uso adecuado de volátiles sig_atomic_t

De acuerdo aest sitio, uno puede usar variables de tipovolatile sig_atomic_t dentro de un manejador de señal. Ahora mi pregunta es, ¿por ejemplo, algo como el siguiente código todavía sería atómico y, por lo tanto, no introduciría condiciones de carrera?

Supongamos que estamos utilizando un procesador multinúcleo EDITA: ejecutar un programa multiproceso). Hacevolatile sig_atomic_t incluso funciona para sistemas multinúcleo en primer lugar o deberíamos usar elatomic<unsigned int> de C ++ 11 para manejadores de señales en un sistema multinúcleo EDITA: ejecutando un programa multiproceso)

volatile sig_atomic_t a;

static void signal_handler(int sig, siginfo_t *si, void *unused)
{
  int b;
  ................
  b = ...;
  ,a = a | b;
  ................
}