Являются sig_atomic_t и std :: atomic <> взаимозаменяемыми?

Согласно названию. Могу ли я использовать std::atomic<> в обработчике сигнала или sig_atomic_t предоставляет другие функции компилятора?

Ответ 1

n3376 1,9/6

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

- типа volatile std :: sig_atomic_t и

- блокирующие атомные объекты (29.4)

не указаны во время выполнения обработчика сигнала, а значение любого объекта, не входящего ни в одну из этих двух категорий, которое модифицируется обработчиком, становится неопределенным.

Без блокировки 29,4/1,2

Макросы ATOMIC _..._ LOCK_FREE указывают свойство блокировки соответствующих атомных типов с объединенными и подписанными вариантами без знака. Свойства также применимы к соответствующим (частичным) специализациям атомного шаблона. Значение 0 указывает, что типы никогда не блокируются. Значение 1 указывает, что типы иногда блокируются. Значение 2 указывает, что типы всегда блокируются.

Функция atomic_is_lock_free (29.6) указывает, свободен ли объект. В любом выполнении данной программы результат запроса без блокировки должен быть согласованным для всех указателей того же типа.