Namespaces
Variants

atomic_fetch_sub, atomic_fetch_sub_explicit

From cppreference.net
Определено в заголовочном файле <stdatomic.h>
C atomic_fetch_sub ( volatile A * obj, M arg ) ;
(1) (начиная с C11)
C atomic_fetch_sub_explicit ( volatile A * obj, M arg, memory_order order ) ;
(2) (начиная с C11)

Атомарно заменяет значение, на которое указывает obj , результатом вычитания arg из старого значения obj , и возвращает значение obj , которое хранилось ранее. Операция является операцией чтения-изменения-записи. Первая версия упорядочивает доступ к памяти в соответствии с memory_order_seq_cst , вторая версия упорядочивает доступ к памяти в соответствии с order .

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

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

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

Содержание

Параметры

obj - указатель на атомарный объект для модификации
arg - значение для вычитания из значения, хранящегося в атомарном объекте
order - порядок синхронизации памяти для этой операции: допустимы все значения

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

Значение, которое ранее содержалось в атомарном объекте, на который указывает obj .

Ссылки

  • Стандарт C17 (ISO/IEC 9899:2018):
  • 7.17.7.5 Универсальные функции atomic_fetch и modify (стр. 208)
  • Стандарт C11 (ISO/IEC 9899:2011):
  • 7.17.7.5 Универсальные функции atomic_fetch и modify (стр: 284-285)

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

атомарное сложение
(функция)
Документация C++ для atomic_fetch_sub , atomic_fetch_sub_explicit