Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Описывает объект, выполняющий atomic операции с хранимым значением типа Ty.
Синтаксис
template <class Ty>
struct atomic;
Участники
| Элемент | Description |
|---|---|
| Конструктор | |
atomic |
Создает атомарный объект. |
| Операторы | |
atomic::operator Ty |
Считывает и возвращает сохраненное значение. (atomic::load) |
atomic::operator= |
Использует указанное значение для замены сохраненного значения. (atomic::store) |
atomic::operator++ |
Увеличивает сохраненное значение. Используется только специализациями для целочисленных типов и указателей. |
atomic::operator+= |
Добавляет указанное значение к сохраненному значению. Используется только специализациями для целочисленных типов и указателей. |
atomic::operator-- |
Уменьшает сохраненное значение. Используется только специализациями для целочисленных типов и указателей. |
atomic::operator-= |
Вычитает указанное значение из сохраненного значения. Используется только специализациями для целочисленных типов и указателей. |
atomic::operator&= |
Выполняет битовое значение "and" (&) для указанного значения и сохраненного значения. Используется только специализациями для целочисленных типов. |
atomic::operator|= |
Выполняет битовое значение "или" (|) для указанного значения и сохраненного значения. Используется только специализациями для целочисленных типов. |
atomic::operator^= |
Выполняет побитовое "эксклюзивное или" (^) значение указанного значения и сохраненное значение. Используется только специализациями для целочисленных типов. |
| Функции | |
compare_exchange_strong |
Выполняет операцию atomic_compare_and_exchange с this и возвращает результат. |
compare_exchange_weak |
Выполняет операцию weak_atomic_compare_and_exchange с this и возвращает результат. |
fetch_add |
Добавляет указанное значение к сохраненному значению. |
fetch_and |
Выполняет битовое значение "and" (&) для указанного значения и сохраненного значения. |
fetch_or |
Выполняет битовое значение "или" (|) для указанного значения и сохраненного значения. |
fetch_sub |
Вычитает указанное значение из сохраненного значения. |
fetch_xor |
Выполняет побитовое "эксклюзивное или" (^) значение указанного значения и сохраненное значение. |
is_lock_free |
Указывает, свободны ли atomic операции при this блокировке. Тип atomic не блокируется, если операции с этим типом не atomic используют блокировки. |
load |
Считывает и возвращает сохраненное значение. |
store |
Использует указанное значение для замены сохраненного значения. |
Замечания
Тип Ty должен быть доступен для простого копирования. То есть для memcpy копирования байтов необходимо создать допустимый Ty объект, который сравнивается с исходным объектом. Функции-членыcompare_exchange_weak, используемые memcmp для определения того, равны ли два Ty значения.compare_exchange_strong Эти функции не будут использовать определяемую operator==функциюTy. Функции-члены atomic используют memcpy для копирования значений типа Ty.
Частичная специализация atomic<Ty*> существует для всех типов указателей. Специализация позволяет добавлять смещение к значению управляемого указателя или вычитать из него смещение. Арифметические операции принимают аргумент типа ptrdiff_t и настраивают этот аргумент в соответствии с размером Ty для согласования с обычным вычислением адресов.
Специализация существует для любого целочисленного типа, кроме bool. Каждая специализация предоставляет широкий набор методов для атомарных арифметических и логических операций.
atomic<char>
atomic<signed char>
atomic<unsigned char>
atomic<char16_t>
atomic<char32_t>
atomic<wchar_t>
atomic<short>
atomic<unsigned short>
atomic<int>
atomic<unsigned int>
atomic<long>
atomic<unsigned long>
atomic<long long>
atomic<unsigned long long>
Специализации для целочисленных типов являются производными от соответствующих типов atomic_integral. Например, atomic<unsigned int> является производной от atomic_uint.
Требования
Заголовок: <atomic>
Пространство имен: std
atomic::atomic
Создает атомарный объект.
atomic();
atomic( const atomic& );
atomic( Ty Value ) noexcept;
Параметры
Value
Значение инициализации.
Замечания
Атомарные объекты нельзя копировать или перемещать.
Объекты, которые являются экземплярами atomic<Ty> , можно инициализировать только конструктором, принимающим аргумент типа Ty , а не с помощью агрегатной инициализации. atomic_integral Однако объекты можно инициализировать только с помощью статистической инициализации.
atomic<int> ai0 = ATOMIC_VAR_INIT(0);
atomic<int> ai1(0);
atomic::operator Ty
Оператор для типа, указанного в шаблоне, atomic<Ty>. Извлекает сохраненное значение в *this.
atomic<Ty>::operator Ty() const volatile noexcept;
atomic<Ty>::operator Ty() const noexcept;
Замечания
Этот оператор применяет memory_order_seq_cst memory_order.
atomic::operator=
Сохраняет указанное значение.
Ty operator=(
Ty Value
) volatile noexcept;
Ty operator=(
Ty Value
) noexcept;
Параметры
Value
Объект Ty.
Возвращаемое значение
Возвращает Value.
atomic::operator++
Увеличивает сохраненное значение. Используется только специализациями для целочисленных типов и указателей.
Ty atomic<Ty>::operator++(int) volatile noexcept;
Ty atomic<Ty>::operator++(int) noexcept;
Ty atomic<Ty>::operator++() volatile noexcept;
Ty atomic<Ty>::operator++() noexcept;
Возвращаемое значение
Первые два оператора возвращают добавочное значение; последние два оператора возвращают значение до увеличения. Операторы используют memory_order_seq_cst memory_order.
atomic::operator+=
Добавляет указанное значение к сохраненному значению. Используется только специализациями для целочисленных типов и указателей.
Ty atomic<Ty>::operator+=(
Ty Value
) volatile noexcept;
Ty atomic<Ty>::operator+=(
Ty Value
) noexcept;
Параметры
Value
Целочисленное или указательное значение.
Возвращаемое значение
Объект Ty , содержащий результат добавления.
Замечания
Этот оператор использует memory_order_seq_cst memory_order.
atomic::operator--
Уменьшает сохраненное значение. Используется только специализациями для целочисленных типов и указателей.
Ty atomic<Ty>::operator--(int) volatile noexcept;
Ty atomic<Ty>::operator--(int) noexcept;
Ty atomic<Ty>::operator--() volatile noexcept;
Ty atomic<Ty>::operator--() noexcept;
Возвращаемое значение
Первые два оператора возвращают отложенное значение; Последние два оператора возвращают значение до уменьшения. Операторы используют memory_order_seq_cst memory_order.
atomic::operator-=
Вычитает указанное значение из сохраненного значения. Используется только специализациями для целочисленных типов и указателей.
Ty atomic<Ty>::operator-=(
Ty Value
) volatile noexcept;
Ty atomic<Ty>::operator-=(
Ty Value
) noexcept;
Параметры
Value
Целочисленное или указательное значение.
Возвращаемое значение
Объект Ty , содержащий результат вычитания.
Замечания
Этот оператор использует memory_order_seq_cst memory_order.
atomic::operator&=
Выполняет побитовое значение "and" (&) для указанного значения и сохраненного *thisзначения. Используется только специализациями для целочисленных типов.
atomic<Ty>::operator&= (
Ty Value
) volatile noexcept;
atomic<Ty>::operator&= (
Ty Value
) noexcept;
Параметры
Value
Значение типа Ty.
Возвращаемое значение
Результат битового "и" (&).
Замечания
Этот оператор выполняет операцию чтения и изменения записи для замены хранимого значения битовой "и" (&) и текущего значения*this, хранящегося в *thisограничениях.memory_order_seq_cst memory_orderValue
atomic::operator|=
Выполняет битовое значение "или" (|) для указанного значения и хранимого *thisзначения. Используется только специализациями для целочисленных типов.
atomic<Ty>::operator|= (
Ty Value
) volatile noexcept;
atomic<Ty>::operator|= (
Ty Value
) noexcept;
Параметры
Value
Значение типа Ty.
Возвращаемое значение
Результат побитового "или" (|).
Замечания
Этот оператор выполняет операцию чтения и изменения записи, чтобы заменить хранимое значение побитовой "или" () и текущее значение*this, хранящееся в *thisограничениях ограничений memory_order memory_order_seq_cst.Value|
atomic::operator^=
Выполняет побитовое "эксклюзивное или" (^) значение указанного значения и хранимое *thisзначение. Используется только специализациями для целочисленных типов.
atomic<Ty>::operator^= (
Ty Value
) volatile noexcept;
atomic<Ty>::operator^= (
Ty Value
) noexcept;
Параметры
Value
Значение типа Ty.
Возвращаемое значение
Результат побитового "эксклюзивного или" (^).
Замечания
Этот оператор выполняет операцию чтения и изменения записи, чтобы заменить хранимое значение *this побитовой "эксклюзивной или" (^) Value и текущего значения, которое хранится в *thisограничениях ограничений memory_order_seq_cst memory_order .
atomic::compare_exchange_strong
Выполняет атомарную операцию сравнения и обмена данными *this.
bool compare_exchange_strong(
Ty& Exp,
Ty Value,
memory_order Order1,
memory_order Order2
) volatile noexcept;
bool compare_exchange_strong(
Ty& Exp,
Ty Value,
memory_order Order1,
memory_order Order2
) noexcept;
bool compare_exchange_strong(
Ty& Exp,
Ty Value,
memory_order Order1 = memory_order_seq_cst
) volatile noexcept;
bool compare_exchange_strong(
Ty& Exp,
Ty Value,
memory_order Order1 = memory_order_seq_cst
) noexcept;
Параметры
Exp
Значение типа Ty.
Value
Значение типа Ty.
Order1
Первый memory_order аргумент.
Order2
Второй аргумент memory_order.
Возвращаемое значение
Логическое значение bool, указывающее результат сравнения значений.
Замечания
Эта атомарная операция сравнения и обмена сравнивает значение, которое хранится в *this Exp. Если значения равны, операция заменяет значение, которое хранится *this Value с помощью операции чтения и изменения записи и применения ограничений порядка памяти, указанных в Order1. Если значения не равны, операция использует значение, которое хранится *this для замены Exp и применения ограничений порядка памяти, заданных Order2.
Перегрузки, у которых нет секунды memory_order , используют неявное Order2 значение Order1. Если Order1 имеет значение , Order2 имеет memory_order_acq_relзначение memory_order_acquire. Если Order1 имеет значение , Order2 имеет memory_order_releaseзначение memory_order_relaxed. Во всех остальных случаях Order2 равно Order1.
Для перегрузки, которые принимают два memory_order параметра, значение Order2 не должно быть memory_order_release или memory_order_acq_relне должно быть сильнее, чем значение Order1.
atomic::compare_exchange_weak
Выполняет слабую атомарную операцию *thisсравнения и обмена.
bool compare_exchange_weak(
Ty& Exp,
Ty Value,
memory_order Order1,
memory_order Order2
) volatile noexcept;
bool compare_exchange_weak(
Ty& Exp,
Ty Value,
memory_order Order1,
memory_order Order2
) noexcept;
bool compare_exchange_weak(
Ty& Exp,
Ty Value,
memory_order Order1 = memory_order_seq_cst
) volatile noexcept;
bool compare_exchange_weak(
Ty& Exp,
Ty Value,
memory_order Order1 = memory_order_seq_cst
) noexcept;
Параметры
Exp
Значение типа Ty.
Value
Значение типа Ty.
Order1
Первый memory_order аргумент.
Order2
Второй аргумент memory_order.
Возвращаемое значение
Логическое значение bool, указывающее результат сравнения значений.
Замечания
Эта атомарная операция сравнения и обмена сравнивает значение, которое хранится в *this Exp. Если значения равны, операция заменяет значение, которое хранится *this Value с помощью операции чтения и изменения записи и применения ограничений порядка памяти, указанных в Order1. Если значения не равны, операция использует значение, которое хранится *this для замены Exp и применения ограничений порядка памяти, заданных Order2.
Слабая атомарная операция сравнения и обмена выполняет обмен, если сравниваемые значения равны. Если значения не равны, операция не гарантируется для выполнения обмена.
Перегрузки, у которых нет секунды memory_order , используют неявное Order2 значение Order1. Если Order1 имеет значение , Order2 имеет memory_order_acq_relзначение memory_order_acquire. Если Order1 имеет значение , Order2 имеет memory_order_releaseзначение memory_order_relaxed. Во всех остальных случаях Order2 равно Order1.
Для перегрузки, которые принимают два memory_order параметра, значение Order2 не должно быть memory_order_release или memory_order_acq_relне должно быть сильнее, чем значение Order1.
atomic::exchange
Использует указанное значение для замены сохраненного значения *this.
Ty atomic<Ty>::exchange(
Ty Value,
memory_order Order = memory_order_seq_cst
) volatile noexcept;
Ty atomic<Ty>::exchange(
Ty Value,
memory_order Order = memory_order_seq_cst
) noexcept;
Параметры
Value
Значение типа Ty.
Order
memory_order.
Возвращаемое значение
Сохраненное значение *this до обмена.
Замечания
Эта операция выполняет операцию чтения и изменения записи для замены Value значения, хранящегося в *thisпределах ограничений памяти, указанных в Order.
atomic::fetch_add
Извлекает значение, сохраненное *thisв, а затем добавляет указанное значение в хранимое значение.
Ty atomic<Ty>::fetch_add (
Ty Value,
memory_order Order = memory_order_seq_cst
) volatile noexcept;
Ty atomic<Ty>::fetch_add (
Ty Value,
memory_order Order = memory_order_seq_cst
) noexcept;
Параметры
Value
Значение типа Ty.
Order
memory_order.
Возвращаемое значение
Объект Ty , содержащий значение, хранящееся *this перед добавлением.
Замечания
Метод fetch_add выполняет операцию чтения и изменения записи для атомарного добавления Value в хранимое значение *thisи применяет ограничения памяти, указанные в Order.
atomic::fetch_and
Выполняет битовое значение "and" (&) для значения и существующего значения, хранящегося в *this.
Ty atomic<Ty>::fetch_and (
Ty Value,
memory_order Order = memory_order_seq_cst
) volatile noexcept;
Ty atomic<Ty>::fetch_and (
Ty Value,
memory_order Order = memory_order_seq_cst
) noexcept;
Параметры
Value
Значение типа Ty.
Order
memory_order.
Возвращаемое значение
Объект Ty , содержащий результат битового "и" (&).
Замечания
Метод fetch_and выполняет операцию чтения и изменения записи для замены хранимого значения *this битовой "и" (&) Value и текущего значения, хранящегося в *thisпределах ограничений памяти, указанных в Order.
atomic::fetch_or
Выполняет побитовое "или" (|) значение и существующее значение, хранящееся в *this.
Ty atomic<Ty>::fetch_or (
Ty Value,
memory_order Order = memory_order_seq_cst
) volatile noexcept;
Ty atomic<Ty>::fetch_or (
Ty Value,
memory_order Order = memory_order_seq_cst
) noexcept;
Параметры
Value
Значение типа Ty.
Order
memory_order.
Возвращаемое значение
Ty Объект, содержащий результат битового "или" (|).
Замечания
Метод fetch_or выполняет операцию чтения и изменения записи для замены хранимого значения *this битовой "или" (|) Value и текущего значения, хранящегося в *thisпределах ограничений памяти, указанных в Order.
atomic::fetch_sub
Вычитает указанное значение из сохраненного значения.
Ty atomic<Ty>::fetch_sub (
Ty Value,
memory_order Order = memory_order_seq_cst
) volatile noexcept;
Ty atomic<Ty>::fetch_sub (
Ty Value,
memory_order Order = memory_order_seq_cst
) noexcept;
Параметры
Value
Значение типа Ty.
Order
memory_order.
Возвращаемое значение
Объект Ty , содержащий результат вычитания.
Замечания
Метод fetch_sub выполняет операцию чтения-изменения записи для атомарного вычитания Value из сохраненного значения в *thisпределах ограничений памяти, указанных в Order.
atomic::fetch_xor
Выполняет побитовое "эксклюзивное или" (^) значение и существующее значение, хранящееся в *this.
Ty atomic<Ty>::fetch_xor (
Ty Value,
memory_order Order = memory_order_seq_cst
) volatile noexcept;
Ty atomic<Ty>::fetch_xor (
Ty Value,
memory_order Order = memory_order_seq_cst
) noexcept;
Параметры
Value
Значение типа Ty.
Order
memory_order.
Возвращаемое значение
Ty Объект, содержащий результат побитового "эксклюзивного или" (^).
Замечания
Метод fetch_xor выполняет операцию чтения и изменения записи, чтобы заменить хранимое значение *this побитовой "эксклюзивной или" (^) Value и текущего значения, которое хранится *thisв, и применяет ограничения памяти, указанные в Order.
atomic::is_lock_free
Указывает, свободны ли atomic операции при *this блокировке.
bool is_lock_free() const volatile noexcept;
Возвращаемое значение
trueЗначение , falseесли atomic операции с *this блокировкой свободны; в противном случае .
Замечания
Тип atomic не блокируется, если операции с этим типом не atomic используют блокировки.
atomic::load
Извлекает хранимое значение в *thisпределах указанных ограничений памяти.
Ty atomic::load(
memory_order Order = memory_order_seq_cst
) const volatile noexcept;
Ty atomic::load(
memory_order Order = memory_order_seq_cst
) const noexcept;
Параметры
Order
memory_order. Order не должно быть memory_order_release или memory_order_acq_rel.
Возвращаемое значение
Извлеченное значение, которое хранится в *this.
atomic::store
Сохраняет указанное значение.
void atomic<Ty>::store(
Ty Value,
memory_order Order = memory_order_seq_cst
) volatile noexcept;
void atomic<Ty>::store(
Ty Value,
memory_order Order = memory_order_seq_cst
) noexcept;
Параметры
Value
Объект Ty.
Order
Ограничение memory_order .
Замечания
Эта функция-член атомарно сохраняет Value в *thisпределах ограничений памяти, указанных в Order.