Spec-Zone.ru › C

atomic_fetch_sub, atomic_fetch_sub_explicit

Определено в заголовке <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. Аргумент — указатель на изменчивый атомарный тип, принимающий адреса как неизменчивых, так и изменчивых (например, отображаемых в памяти) атомарных объектов, и семантика изменчивости сохраняется при применении этой операции к изменчивым атомарным объектам. M — это либо неатомарный тип, соответствующий A , если A — атомарный целочисленный тип, либо ptrdiff_t , если A — атомарный указательный тип.

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

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

Параметры

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

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

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

Ссылки

  • Стандарт C17 (ISO/IEC 9899:2018):
    • 7.17.7.5 Общие функции атомарного доступа и изменения (с. 208)
  • Стандарт C11 (ISO/IEC 9899:2011):
    • 7.17.7.5 Общие функции атомарного доступа и изменения (с. 284-285)

См. также

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

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/c/atomic/atomic_fetch_sub

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API