Подтвердить что ты не робот

Правильное использование volatile sig_atomic_t

Согласно этому сайту, внутри обработчика сигнала можно использовать переменные типа volatile sig_atomic_t. Теперь, на мой вопрос, будет, например, что-то вроде следующего кода все еще атомарным и, следовательно, не будет вводить никаких условий гонки?

Предположим, что мы используем многоядерный процессор ( EDIT: запуск многопоточной программы). Действительно ли volatile sig_atomic_t работает для многоядерных систем в первую очередь или мы должны использовать atomic<unsigned int> для С++ 11 для обработчиков сигналов в многоядерной системе ( EDIT: запуск многопоточной программы)?

volatile sig_atomic_t a;

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

Ответ 1

Если ваша программа многопоточная, обработчики сигналов никогда не запускаются одновременно с другим кодом в вашей программе, и они, безусловно, никогда не запускаются одновременно с кодом, который они прервали. Ваш код в порядке, пока сигнал sig замаскирован на время обработчика сигнала.