Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Заголовок <atomic> предоставляет следующие функции:
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 выполняет операцию чтения и изменения записи для обмена значением, хранящимся в AtomValue, с помощью 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 выполняет операцию чтения и изменения записи для обмена значением, хранящимся в AtomValueпределах ограничений памяти, заданных 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 в хранимое значение в Atommemory_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 побитовой orValue и текущее значение, хранящееся в 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 побитовой orValue и текущее значение, хранящееся в 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 из сохраненного Atom значения memory_order.memory_order_seq_cstс помощью ограничения.
Когда атомарным типом является 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 из сохраненного значения в Atommemory_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 orValue и текущее значение, хранящееся в 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 orValue и текущего значения, Atom хранящегося в memory_orderограничениях, указанных в Order.
atomic_flag_clear
bool Задает флаг в объекте atomic_flagfalseв пределах объекта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_flagfalseв пределах указанных 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_flagtrueв пределах указанных 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_releasememory_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 в объекте, на который указывает Atommemory_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 не содержит зависимость для вызова функции. Разбивая возможную цепочку зависимостей, функция позволяет компилятору создавать более эффективный код.