Вызов функции 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]) этой переменной.