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_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_order
Value
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
.