Namespaces
Variants

atomic_init

From cppreference.net
Определено в заголовочном файле <stdatomic.h>
void atomic_init ( volatile A * obj, C desired ) ;
(начиная с C11)

Инициализирует объект атомарной переменной, созданный конструктором по умолчанию obj значением desired . Функция не является атомарной: конкурентный доступ из другого потока, даже через атомарную операцию, является состоянием гонки данных.

Это обобщенная функция , определенная для всех атомарных типов объектов A . Аргументом является указатель на volatile атомарный тип для принятия адресов как не-volatile, так и volatile (например, отображенных в памяти I/O) атомарных объектов, и семантика volatile сохраняется при применении этой операции к volatile атомарным объектам. C является неатомарным типом, соответствующим A .

Не определено, является ли имя обобщённой функции макросом или идентификатором, объявленным с внешней линковкой. Если определение макроса подавляется для доступа к реальной функции (например, заключено в скобки как ( atomic_init ) ( ... ) ), или программа определяет внешний идентификатор с именем обобщённой функции, поведение не определено.

Содержание

Параметры

obj - указатель на атомарный объект для инициализации
desired - значение для инициализации атомарного объекта

Возвращаемое значение

(нет)

Примечания

atomic_init — это единственный способ инициализации динамически выделенных атомарных объектов. Например:

_Atomic int *p = malloc(sizeof(_Atomic int));
atomic_init(p, 42);

Ссылки

  • Стандарт C23 (ISO/IEC 9899:2024):
  • 7.17.2.2 Универсальная функция atomic_init (стр.: TBD)
  • Стандарт C17 (ISO/IEC 9899:2018):
  • 7.17.2.2 Универсальная функция atomic_init (стр. 201)
  • Стандарт C11 (ISO/IEC 9899:2011):
  • 7.17.2.2 Универсальная функция atomic_init (стр: 274-275)

Смотрите также

(C11) (устарело в C17) (удалено в C23)
инициализирует новый атомарный объект
(функция-макрос)