atomic Структура

Описывает объект, выполняющий 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_cstmemory_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_cstmemory_order.

atomic::operator+=

Добавляет указанное значение к сохраненному значению. Используется только специализациями для целочисленных типов и указателей.

Ty atomic<Ty>::operator+=(
   Ty Value
) volatile noexcept;
Ty atomic<Ty>::operator+=(
   Ty Value
) noexcept;

Параметры

Value
Целочисленное или указательное значение.

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

Объект Ty , содержащий результат добавления.

Замечания

Этот оператор использует memory_order_seq_cstmemory_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_cstmemory_order.

atomic::operator-=

Вычитает указанное значение из сохраненного значения. Используется только специализациями для целочисленных типов и указателей.

Ty atomic<Ty>::operator-=(
   Ty Value
) volatile noexcept;
Ty atomic<Ty>::operator-=(
   Ty Value
) noexcept;

Параметры

Value
Целочисленное или указательное значение.

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

Объект Ty , содержащий результат вычитания.

Замечания

Этот оператор использует memory_order_seq_cstmemory_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_cstmemory_orderValue

atomic::operator|=

Выполняет битовое значение "или" (|) для указанного значения и хранимого *thisзначения. Используется только специализациями для целочисленных типов.

atomic<Ty>::operator|= (
   Ty Value
) volatile noexcept;
atomic<Ty>::operator|= (
   Ty Value
) noexcept;

Параметры

Value
Значение типа Ty.

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

Результат побитового "или" (|).

Замечания

Этот оператор выполняет операцию чтения и изменения записи, чтобы заменить хранимое значение побитовой "или" () и текущее значение*this, хранящееся в *thisограничениях ограниченийmemory_ordermemory_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_cstmemory_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, указывающее результат сравнения значений.

Замечания

Эта атомарная операция сравнения и обмена сравнивает значение, которое хранится в *thisExp. Если значения равны, операция заменяет значение, которое хранится *thisValue с помощью операции чтения и изменения записи и применения ограничений порядка памяти, указанных в 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, указывающее результат сравнения значений.

Замечания

Эта атомарная операция сравнения и обмена сравнивает значение, которое хранится в *thisExp. Если значения равны, операция заменяет значение, которое хранится *thisValue с помощью операции чтения и изменения записи и применения ограничений порядка памяти, указанных в 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.

См. также

<atomic>
Справочник по файлам заголовков