Spec-Zone.ru › C

atomic_exchange, atomic_exchange_explicit

Определено в заголовке <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 сохраняется при применении этой операции к изменяемым атомным объектам. 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)

См. также

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

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

Spec-Zone.ru

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