atomic_fetch_and, atomic_fetch_and_explicit
Определено в заголовочном файле <stdatomic.h> | ||
|---|---|---|
C atomic_fetch_and( volatile A* obj, M arg ); | (1) | (с C11) |
C atomic_fetch_and_explicit( volatile A* obj, M arg, memory_order order ); | (2) | (с C11) |
Атомарно заменяет значение, на которое указывает obj, результатом поразрядной операции AND между старым значением obj и arg, и возвращает ранее хранившееся значение obj. Данная операция является операцией "чтение-модификация-запись". Первый вариант упорядочивает обращения к памяти в соответствии с memory_order_seq_cst, а второй — в соответствии с order.
Это общая функция, определённая для всех атомных типов данных A. Аргумент — указатель на переменную volatile атомного типа, принимающий адреса как не-volatile, так и volatile (например, памяти с отображением ввода-вывода) атомных объектов, и семантика volatile сохраняется при применении этой операции к volatile атомным объектам. M — это либо неатомный тип, соответствующий A, если A — атомный целочисленный тип, либо ptrdiff_t, если A — атомный указательный тип.
Неопределено, является ли имя общей функции макросом или идентификатором, объявленным с внешней связью. Если определение макроса подавлено для доступа к фактической функции (например, в скобках, как в (atomic_fetch_and)(...)), или программа определяет внешний идентификатор с именем общей функции, поведение является неопределённым.
Параметры
| obj | - | указатель на атомный объект, который нужно изменить |
| arg | - | значение, используемое для поразрядной операции AND со значением, хранящимся в атомном объекте |
| order | - | порядок синхронизации памяти для этой операции: допускаются все значения |
Возвращаемое значение
Значение, которое хранилось в атомном объекте, на который указывает obj.
Ссылки
- Стандарт C17 (ISO/IEC 9899:2018):
- 7.17.7.5 Общие функции atomic_fetch и модификации (с. 208)
- Стандарт C11 (ISO/IEC 9899:2011):
- 7.17.7.5 Общие функции atomic_fetch и модификации (с. 284-285)
См. также
|
(C11) | поразрядное логическое ИЛИ (функция) |
|
(C11) | поразрядное исключающее ИЛИ (функция) |
Документация C++ для atomic_fetch_and, atomic_fetch_and_explicit |
|
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/c/atomic/atomic_fetch_and