21 Language support library [language.support]

21.10 Other runtime support [support.runtime]

21.10.4 Signal handlers [support.signal]

Вызов функции signal синхронизируется с любым результирующим вызовом установленного таким образом обработчика сигнала.

A plain lock-free atomic operation - это вызов функции f из Clause [atomics], такой что:

  • f это функция atomic_­is_­lock_­free(), или

  • f это функция-член is_­lock_­free(), или

  • f - нестатическая функция-член, вызываемая для объекта A, такая, что A.is_­lock_­free() дает true, или

  • f является функцией не являющегося членом, и для каждого указателя к атомным аргумента A передается f, atomic_­is_­lock_­free(A) выходы true.

Оценка проводится, signal-safe если она не включает одно из следующего:

  • вызов любой стандартной библиотечной функции, за исключением простых атомарных операций без блокировки и функций, явно определенных как безопасные для сигналов. [ Note: Это неявно исключает использование new и delete выражения , которые полагаются на библиотеку , предоставленный распределителем памяти. ]end note

  • доступ к объекту с длительностью хранения потока;

  • dynamic_­cast выражение;

  • выброс исключения;

  • контролировать ввод try-blockили function-try-block;

  • инициализация переменной со статической продолжительностью хранения, требующей динамической инициализации ([basic.start.dynamic], [stmt.dcl])220; или

  • ожидает завершения инициализации переменной со статической продолжительностью хранения ([stmt.dcl]).

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

Функция signal безопасна для сигналов, если она вызывается с первым аргументом, равным номеру сигнала, соответствующему сигналу, вызвавшему вызов обработчика.

См. Также: ISO C 7.14.

Такая инициализация может произойти, потому что это первая функция odr-use ([basic.def.odr]) этой переменной.