Namespaces
Variants

atomic_exchange, atomic_exchange_explicit

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

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

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

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

Содержание

Параметры

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

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

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

Ссылки

  • Стандарт C17 (ISO/IEC 9899:2018):
  • 7.17.7.3 Универсальные функции atomic_exchange (стр. 207)
  • Стандарт C11 (ISO/IEC 9899:2011):
  • 7.17.7.3 Универсальные функции atomic_exchange (стр: 283)

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

обменивает значение с атомарным объектом, если старое значение соответствует ожидаемому, в противном случае считывает старое значение
(функция)
C++ документация для atomic_exchange , atomic_exchange_explicit