Правильное использование volatile sig_atomic_t - PullRequest
14 голосов
/ 13 декабря 2011

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

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

volatile sig_atomic_t a;

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

1 Ответ

17 голосов
/ 13 декабря 2011

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

...