<atomic>
Функции
atomic_compare_exchange_strong
atomic_compare_exchange_strong_explicit
atomic_compare_exchange_weak
atomic_compare_exchange_weak_explicit
atomic_exchange
atomic_exchange_explicit
atomic_fetch_add
atomic_fetch_add_explicit
atomic_fetch_and
atomic_fetch_and_explicit
atomic_fetch_or
atomic_fetch_or_explicit
atomic_fetch_sub
atomic_fetch_sub_explicit
atomic_fetch_xor
atomic_fetch_xor_explicit
atomic_flag_clear
atomic_flag_clear_explicit
atomic_flag_test_and_set
atomic_flag_test_and_set_explicit
atomic_init
atomic_is_lock_free
atomic_load
atomic_load_explicit
atomic_signal_fence
atomic_store
atomic_store_explicit
atomic_thread_fence
kill_dependency
atomic_compare_exchange_strong
Выполняет атомарную операцию сравнения и обмена.
template <class Ty>
inline bool atomic_compare_exchange_strong(
volatile atomic<Ty>* Atom,
Ty* Exp,
Value) noexcept;
template <class Ty>
inline bool atomic_compare_exchange_strong(
atomic<Ty>* Atom,
Ty* Exp,
Ty Value) noexcept;
Параметры
Atom
Указатель на объект atomic
, который хранит значение типа Ty
.
Exp
Указатель на значение типа Ty
.
Value
Значение типа Ty
.
Возвращаемое значение
true
Значение , если значения равны, в противном случае false
.
Замечания
Этот метод выполняет атомарную операцию сравнения и обмена с помощью неявных memory_order.memory_order_seq_cst
аргументов. Дополнительные сведения см. в разделе atomic_compare_exchange_strong_explicit
.
atomic_compare_exchange_strong_explicit
atomic compare and exchange
Выполняет операцию.
template <class T>
inline bool atomic_compare_exchange_strong_explicit(
volatile atomic<Ty>* Atom,
Ty* Exp,
Ty Value,
memory_order Order1,
memory_order Order2) noexcept;
template <class Ty>
inline bool atomic_compare_exchange_strong_explicit(
atomic<Ty>* Atom,
Ty* Exp,
Ty Value,
memory_order Order1,
memory_order Order2) noexcept;
Параметры
Atom
Указатель на объект atomic
, который хранит значение типа Ty
.
Exp
Указатель на значение типа Ty
.
Value
Значение типа Ty
.
Order1
Первый memory_order
аргумент.
Order2
Второй аргумент memory_order
. Значение Order2
не может быть memory_order_release
или memory_order_acq_rel
, и оно не может быть надежнее, чем значение Order1
.
Возвращаемое значение
true
Значение , если значения равны, в противном случае false
.
Замечания
Объект atomic compare and exchange operation
сравнивает значение, хранящееся в объекте, на которое указывает Atom
значение, на которое указывает Exp
значение. Если значения равны, то значение, хранящееся в объекте, на которое указывает Atom
, заменяется Value
с помощью операции чтения и изменения записи и применения ограничений порядка памяти, указанных в Order1
них. Если значения не равны, операция заменяет значение, указываемое Exp
на значение, хранящееся в объекте, на которое указывает Atom
и применяет ограничения порядка памяти, указанные в Order2
них.
atomic_compare_exchange_weak
Выполняет слабую атомарную операцию сравнения и обмена.
template <class Ty>
inline bool atomic_compare_exchange_strong(
volatile atomic<Ty>* Atom,
Ty* Exp,
Ty Value) noexcept;
template <class Ty>
inline bool atomic_compare_exchange_strong(
atomic<Ty>* Atom,
Ty* Exp,
Ty Value) noexcept;
Параметры
Atom
Указатель на объект atomic
, который хранит значение типа Ty
.
Exp
Указатель на значение типа Ty
.
Value
Значение типа Ty
.
Возвращаемое значение
true
Значение , если значения равны, в противном случае false
.
Замечания
Этот метод выполняет слабую атомарную операцию сравнения и обмена, которая имеет неявные memory_order.memory_order_seq_cst
аргументы. Дополнительные сведения см. в разделе atomic_compare_exchange_weak_explicit
.
atomic_compare_exchange_weak_explicit
Выполняет слабую атомарную операцию сравнения и обмена.
template <class Ty>
inline bool atomic_compare_exchange_weak_explicit(
volatile atomic<Ty>* Atom,
Ty* Exp,
Ty Value,
memory_order Order1,
memory_order Order2) noexcept;
template <class Ty>
inline bool atomic_compare_exchange_weak_explicit(
atomic<Ty>* Atom,
Ty* Exp,
Ty Value,
memory_order Order1,
memory_order Order2) noexcept;
Параметры
Atom
Указатель на объект atomic
, который хранит значение типа Ty
.
Exp
Указатель на значение типа Ty
.
Value
Значение типа Ty
.
Order1
Первый memory_order
аргумент.
Order2
Второй аргумент memory_order
. Значение Order2
не может быть memory_order_release
или memory_order_acq_rel
, и оно не может быть надежнее, чем значение Order1
.
Возвращаемое значение
true
Значение , если значения равны, в противном случае false
.
Замечания
Сильные и слабые вкусы atomic compare and exchange operation
гарантии, что они не сохраняют новое значение, если ожидаемые и текущие значения не равны. Сильный вкус гарантирует, что он будет хранить новое значение, если ожидаемые и текущие значения равны. Слабый вкус иногда может возвращать false
и не хранить новое значение, даже если текущие и ожидаемые значения равны. Другими словами, функция вернет false
, но более поздний анализ ожидаемого значения может показать, что он не изменился, и поэтому должен был сравниться как равный.
atomic_exchange
Использует Value
для замены сохраненного значения Atom
.
template <class T>
inline Ty atomic_exchange(volatile atomic<Ty>* _Atom, Ty Value) noexcept;
template <class Ty>
inline T atomic_exchange(atomic<Ty>* Atom, Ty Value) noexcept;
Параметры
Atom
Указатель на объект atomic
, который хранит значение типа Ty
.
Value
Значение типа Ty
.
Возвращаемое значение
Сохраненное значение Atom
до обмена.
Замечания
Функция atomic_exchange
выполняет операцию чтения и изменения записи для обмена значением, хранящимся в Atom
Value
, с помощью memory_order.memory_order_seq_cst
.
atomic_exchange_explicit
Заменяет значение, хранящееся в Atom
, на Value
.
template <class Ty>
inline Ty atomic_exchange_explicit(
volatile atomic<Ty>* Atom,
Ty Value,
memory_order Order) noexcept;
template <class Ty>
inline Ty atomic_exchange_explicit(
atomic<Ty>* Atom,
Ty Value,
memory_order Order) noexcept;
Параметры
Atom
Указатель на объект atomic
, который хранит значение типа Ty
.
Value
Значение типа Ty
.
Order
memory_order
.
Возвращаемое значение
Сохраненное значение Atom
до обмена.
Замечания
Функция atomic_exchange_explicit
выполняет операцию чтения и изменения записи для обмена значением, хранящимся в Atom
Value
пределах ограничений памяти, заданных Order
.
atomic_fetch_add
Добавляет значение к существующему значению, хранящемуся в объекте atomic
.
template <class T>
T* atomic_fetch_add(volatile atomic<T*>* Atom, ptrdiff_t Value) noexcept;
template <class T>
T* atomic_fetch_add(atomic<T*>* Atom, ptrdiff_t Value) noexcept;
Параметры
Atom
Указатель на объект atomic
, который хранит указатель на тип T
.
Value
Значение типа ptrdiff_t
.
Возвращаемое значение
Значение указателя, содержащегося atomic
объектом непосредственно перед выполнением операции.
Замечания
Функция atomic_fetch_add
выполняет операцию чтения и изменения записи для атомарного добавления Value
в хранимое значение Atom
с помощью memory_order.memory_order_seq_cst
ограничения.
Когда атомарным типом является atomic_address
, Value
имеет тип ptrdiff_t
, и операция считает, что тип сохраненного указателя — char *
.
Эта операция также перегружается для целочисленных типов:
integral atomic_fetch_add(volatile atomic-integral* Atom, integral Value) noexcept;
integral atomic_fetch_add(atomic-integral* Atom, integral Value) noexcept;
atomic_fetch_add_explicit
Добавляет значение к существующему значению, хранящемуся в объекте atomic
.
template <class T>
T* atomic_fetch_add_explicit(
volatile atomic<T*>* Atom,
ptrdiff_t Value,
memory_order Order) noexcept;
template <class T>
T* atomic_fetch_add_explicit(
atomic<T*>* Atom,
ptrdiff_t Value,
memory_order Order) noexcept;
Параметры
Atom
Указатель на объект atomic
, который хранит указатель на тип T
.
Value
Значение типа ptrdiff_t
.
Возвращаемое значение
Значение указателя, содержащегося atomic
объектом непосредственно перед выполнением операции.
Замечания
Функция atomic_fetch_add_explicit
выполняет операцию чтения и изменения записи для атомарного добавления Value
в хранимое значение в Atom
memory_order
пределах ограничений, указанных в Order
.
Когда атомарным типом является atomic_address
, Value
имеет тип ptrdiff_t
, и операция считает, что тип сохраненного указателя — char *
.
Эта операция также перегружается для целочисленных типов:
integral atomic_fetch_add_explicit(
volatile atomic-integral* Atom,
integral Value,
memory_order Order) noexcept;
integral atomic_fetch_add_explicit(
atomic-integral* Atom,
integral Value,
memory_order Order) noexcept;
atomic_fetch_and
Выполняет побитовую операцию &
со значением и существующим значением, хранящимся в объекте atomic
.
template <class T>
inline T atomic_fetch_and(volatile atomic<T>* Atom, T Value) noexcept;
template <class T>
inline T atomic_fetch_and(volatile atomic<T>* Atom, T Value) noexcept;
Параметры
Atom
Указатель на объект atomic
, который хранит значение типа T
.
Value
Значение типа T
.
Возвращаемое значение
Значение, содержащееся atomic
объектом непосредственно перед выполнением операции.
Замечания
Функция atomic_fetch_and
выполняет операцию чтения и изменения записи для замены хранимого значения Atom
битовой &
Value
и текущего значения, хранящегося в Atom
, с помощью memory_order.memory_order_seq_cst
ограничения.
atomic_fetch_and_explicit
Выполняет побитовую операцию &
со значением и существующим значением, хранящимся в объекте atomic
.
template <class T>
inline T atomic_fetch_and_explicit(
volatile atomic<T>* Atom,
T Value,
memory_order Order) noexcept;
template <class T>
inline T atomic_fetch_and_explicit(
volatile atomic<T>* Atom,
T Value,
memory_order Order) noexcept;
Параметры
Atom
Указатель на объект atomic
, который хранит значение типа T
.
Value
Значение типа T
.
Order
memory_order
.
Возвращаемое значение
Значение, содержащееся atomic
объектом непосредственно перед выполнением операции.
Замечания
Функция atomic_fetch_and_explicit
выполняет операцию чтения и изменения записи, чтобы заменить хранимое значение Atom
побитовой &
Value
и текущее значение, хранящееся в Atom
пределах ограничений памяти, указанных в Order
.
atomic_fetch_or
Выполняет побитовую операцию or
со значением и существующим значением, хранящимся в объекте atomic
.
template <class T>
inline T atomic_fetch_or (volatile atomic<T>* Atom, T Value) noexcept;
template <class T>
inline T atomic_fetch_or (volatile atomic<T>* Atom, T Value) noexcept;
Параметры
Atom
Указатель на объект atomic
, который хранит значение типа T
.
Value
Значение типа T
.
Возвращаемое значение
Значение, содержащееся atomic
объектом непосредственно перед выполнением операции.
Замечания
Функция atomic_fetch_or
выполняет операцию чтения и изменения записи, чтобы заменить хранимое значение Atom
побитовой or
Value
и текущее значение, хранящееся в Atom
, с помощью memory_order.memory_order_seq_cst
.
atomic_fetch_or_explicit
Выполняет побитовую операцию or
со значением и существующим значением, хранящимся в объекте atomic
.
template <class T>
inline T atomic_fetch_or_explicit(
volatile atomic<T>* Atom,
T Value,
memory_order Order) noexcept;
template <class T>
inline T atomic_fetch_or_explicit(
volatile atomic<T>* Atom,
T Value,
memory_order Order) noexcept;
Параметры
Atom
Указатель на объект atomic
, который хранит значение типа T
.
Value
Значение типа T
.
Order
memory_order
.
Возвращаемое значение
Значение, содержащееся atomic
объектом непосредственно перед выполнением операции.
Замечания
Функция atomic_fetch_or_explicit
выполняет операцию чтения и изменения записи, чтобы заменить хранимое значение Atom
побитовой or
Value
и текущее значение, хранящееся в Atom
пределах ограничений, memory_order
указанных в Order
.
atomic_fetch_sub
Вычитает значение из существующего значения, хранящегося в объекте atomic
.
template <class T>
T* atomic_fetch_sub(
volatile atomic<T*>* Atom,
ptrdiff_t Value) noexcept;
template <class T>
T* atomic_fetch_sub(
atomic<T*>* Atom,
ptrdiff_t Value) noexcept;
Параметры
Atom
Указатель на объект atomic
, который хранит указатель на тип T
.
Value
Значение типа ptrdiff_t
.
Возвращаемое значение
Значение указателя, содержащегося atomic
объектом непосредственно перед выполнением операции.
Замечания
Функция atomic_fetch_sub
выполняет операцию чтения и изменения записи для атомарного вычитания Value
из сохраненного memory_order.memory_order_seq_cst
значения Atom
с помощью ограничения.
Когда атомарным типом является atomic_address
, Value
имеет тип ptrdiff_t
, и операция считает, что тип сохраненного указателя — char *
.
Эта операция также перегружается для целочисленных типов:
integral atomic_fetch_sub(volatile atomic-integral* Atom, integral Value) noexcept;
integral atomic_fetch_sub(atomic-integral* Atom, integral Value) noexcept;
atomic_fetch_sub_explicit
Вычитает значение из существующего значения, хранящегося в объекте atomic
.
template <class T>
T* atomic_fetch_sub_explicit(
volatile atomic<T*>* Atom,
ptrdiff_t Value,
memory_order Order) noexcept;
template <class T>
T* atomic_fetch_sub_explicit(
atomic<T*>* Atom,
ptrdiff_t Value, memory_order Order) noexcept;
Параметры
Atom
Указатель на объект atomic
, который хранит указатель на тип T
.
Value
Значение типа ptrdiff_t
.
Возвращаемое значение
Значение указателя, содержащегося atomic
объектом непосредственно перед выполнением операции.
Замечания
Функция atomic_fetch_sub_explicit
выполняет операцию чтения и изменения записи для атомарного вычитания Value
из сохраненного значения в Atom
memory_order
пределах ограничений, указанных в Order
.
Когда атомарным типом является atomic_address
, Value
имеет тип ptrdiff_t
, и операция считает, что тип сохраненного указателя — char *
.
Эта операция также перегружается для целочисленных типов:
integral atomic_fetch_sub_explicit(
volatile atomic-integral* Atom,
integral Value,
memory_order Order) noexcept;
integral atomic_fetch_sub_explicit(
atomic-integral* Atom,
integral Value,
memory_order Order) noexcept;
atomic_fetch_xor
Выполняет побитовую операцию exclusive or
со значением и существующим значением, хранящимся в объекте atomic
.
template <class T>
inline T atomic_fetch_xor(volatile atomic<T>* Atom, T Value) noexcept;
template <class T>
inline T atomic_fetch_xor(volatile atomic<T>* Atom, T Value) noexcept;
Параметры
Atom
Указатель на объект atomic
, который хранит значение типа T
.
Value
Значение типа T
.
Возвращаемое значение
Значение, содержащееся atomic
объектом непосредственно перед выполнением операции.
Замечания
Функция atomic_fetch_xor
выполняет операцию чтения и изменения записи, чтобы заменить хранимое значение Atom
побитовой exclusive or
Value
и текущее значение, хранящееся в Atom
, с помощью memory_order.memory_order_seq_cst
.
atomic_fetch_xor_explicit
Выполняет побитовое exclusive or
значение и существующее значение, хранящееся в объекте atomic
.
template <class T>
inline T atomic_fetch_xor_explicit(
volatile atomic<T>* Atom,
T Value,
memory_order Order) noexcept;
template <class T>
inline T atomic_fetch_xor_explicit(
volatile atomic<T>* Atom,
T Value,
memory_order Order) noexcept;
Параметры
Atom
Указатель на объект atomic
, который хранит значение типа T
.
Value
Значение типа T
.
Order
memory_order
.
Возвращаемое значение
Значение, содержащееся atomic
объектом непосредственно перед выполнением операции.
Замечания
Функция atomic_fetch_xor_explicit
выполняет операцию чтения и изменения записи для замены хранимого значения Atom
побитовой exclusive or
Value
и текущего значения, memory_order
хранящегося в Atom
ограничениях, указанных в Order
.
atomic_flag_clear
bool
Задает флаг в объекте atomic_flag
false
в пределах объектаmemory_order.memory_order_seq_cst
.
inline void atomic_flag_clear(volatile atomic_flag* Flag) noexcept;
inline void atomic_flag_clear(atomic_flag* Flag) noexcept;
Параметры
Flag
Указатель на объект atomic_flag
.
atomic_flag_clear_explicit
bool
Задает флаг в объекте atomic_flag
false
в пределах указанных memory_order
ограничений.
inline void atomic_flag_clear_explicit(volatile atomic_flag* Flag, memory_order Order) noexcept;
inline void atomic_flag_clear_explicit(atomic_flag* Flag, memory_order Order) noexcept;
Параметры
Flag
Указатель на объект atomic_flag
.
Order
memory_order
.
atomic_flag_test_and_set
bool
Задает флаг в atomic_flag
объекте true
в пределах ограничений объектаmemory_order.memory_order_seq_cst
.
inline bool atomic_flag_test_and_set(volatile atomic_flag* Flag,) noexcept;
inline bool atomic_flag_test_and_set(atomic_flag* Flag,) noexcept;
Параметры
Flag
Указатель на объект atomic_flag
.
Возвращаемое значение
Начальное значение Flag
.
atomic_flag_test_and_set_explicit
bool
Задает флаг в объекте atomic_flag
true
в пределах указанных memory_order
ограничений.
inline bool atomic_flag_test_and_set_explicit(volatile atomic_flag* Flag, memory_order Order) noexcept;
inline bool atomic_flag_test_and_set_explicit(atomic_flag* Flag, memory_order Order) noexcept;
Параметры
Flag
Указатель на объект atomic_flag
.
Order
memory_order
.
Возвращаемое значение
Начальное значение Flag
.
atomic_init
Задает сохраненное значение в объекте atomic
.
template <class Ty>
inline void atomic_init(volatile atomic<Ty>* Atom, Ty Value) noexcept;
template <class Ty>
inline void atomic_init(atomic<Ty>* Atom, Ty Value) noexcept;
Параметры
Atom
Указатель на объект atomic
, который хранит значение типа Ty
.
Value
Значение типа Ty
.
Замечания
atomic_init
не является атомарной операцией. Это не является потокобезопасной.
atomic_is_lock_free
Указывает, являются ли операции с объектом atomic
неблокирующими.
template <class T>
inline bool atomic_is_lock_free(const volatile atomic<T>* Atom) noexcept;
template <class T>
inline bool atomic_is_lock_free(const atomic<T>* Atom) noexcept;
Параметры
Atom
Указатель на объект atomic
, который хранит значение типа T
.
Возвращаемое значение
Значение true
, если атомарные операции с Atom
являются неблокирующими; в противном случае — значение false
.
Замечания
Атомарный тип является неблокирующим, если никакие атомарные операции с этим типом не используют блокировки. Если эта функция возвращается true
, тип безопасно используется в обработчиках сигналов.
atomic_load
Извлекает сохраненное значение в объект atomic
.
template <class Ty>
inline Ty atomic_load(const volatile atomic<Ty>* Atom) noexcept;
template <class Ty>
inline Ty atomic_load(const atomic<Ty>* Atom) noexcept;
Параметры
Atom
Указатель на объект atomic
, который содержит значение типа Ty
.
Возвращаемое значение
Извлеченное значение, которое хранится в Atom
.
Замечания
atomic_load
неявно использует объект memory_order.memory_order_seq_cst
.
atomic_load_explicit
Извлекает хранимое значение в объекте в atomic
пределах указанного memory_order
объекта.
template <class Ty>
inline Ty atomic_load_explicit(const volatile atomic<Ty>* Atom, memory_order Order) noexcept;
template <class Ty>
inline Ty atomic_load_explicit(const atomic<Ty>* Atom, memory_order Order) noexcept;
Параметры
Atom
Указатель на объект atomic
, который содержит значение типа Ty
.
Order
memory_order
. Не используйте memory_order_release
memory_order_acq_rel
.
Возвращаемое значение
Извлеченное значение, которое хранится в Atom
.
atomic_signal_fence
Выступает в качестве забора — примитив синхронизации памяти, который применяет порядок между операциями загрузки и хранения — между другими заборами в вызывающем потоке с обработчиками сигналов, выполняемыми в одном потоке.
inline void atomic_signal_fence(memory_order Order) noexcept;
Параметры
Order
Ограничение порядка памяти, которое определяет тип границы.
Замечания
Аргумент Order
определяет тип границы.
значение | Описание |
---|---|
memory_order_relaxed |
Граница не действует. |
memory_order_consume |
Граница является границей получения. |
memory_order_acquire |
Граница является границей получения. |
memory_order_release |
Граница является границей выпуска. |
memory_order_acq_rel |
Граница является и границей получения, и границей выпуска. |
memory_order_seq_cst |
Граница является и границей получения, и границей выпуска, и она также последовательно согласованная. |
atomic_store
Атомарно сохраняет значение в объекте atomic
.
template <class Ty>
inline Ty atomic_store_explicit(const volatile atomic<Ty>* Atom, Ty Value) noexcept;
template <class Ty>
inline Ty atomic_store_explicit(const atomic<Ty>* Atom, T Value) noexcept;
Параметры
Atom
Указатель на объект atomic
, который содержит значение типа Ty
.
Value
Значение типа Ty
.
Замечания
atomic_store
хранится Value
в объекте, на который указывает Atom
memory_order.memory_order_seq_cst
ограничение.
atomic_store_explicit
Атомарно сохраняет значение в объекте atomic
.
template <class Ty>
inline Ty atomic_store_explicit(
const volatile atomic<Ty>* Atom,
Ty Value,
memory_order Order) noexcept;
template <class Ty>
inline Ty atomic_store_explicit(
const atomic<Ty>* Atom,
T Value,
memory_order Order) noexcept;
Параметры
Atom
Указатель на объект atomic
, который содержит значение типа Ty
.
Value
Значение типа Ty
.
Order
memory_order
. Не используйте memory_order_consume
, memory_order_acquire
или memory_order_acq_rel
.
Замечания
atomic_store
хранит Value
в объекте, указанном Atom
, с соблюдением ограничений memory_order
, заданных с помощью Order
.
atomic_thread_fence
Выступает в качестве забора — примитив синхронизации памяти, который обеспечивает упорядочение между операциями загрузки и хранения без связанной атомарной операции.
inline void atomic_thread_fence(memory_order Order) noexcept;
Параметры
Order
Ограничение порядка памяти, которое определяет тип границы.
Замечания
Аргумент Order
определяет тип границы.
значение | Описание |
---|---|
memory_order_relaxed |
Граница не действует. |
memory_order_consume |
Граница является границей получения. |
memory_order_acquire |
Граница является границей получения. |
memory_order_release |
Граница является границей выпуска. |
memory_order_acq_rel |
Граница является и границей получения, и границей выпуска. |
memory_order_seq_cst |
Граница является и границей получения, и границей выпуска, и она также последовательно согласованная. |
kill_dependency
Удаляет зависимость.
template <class Ty>
Ty kill_dependency(Ty Arg) noexcept;
Параметры
Arg
Значение типа Ty
.
Возвращаемое значение
Возвращается значение Arg
. Вычисление Arg
не содержит зависимость для вызова функции. Разбивая возможную цепочку зависимостей, функция позволяет компилятору создавать более эффективный код.