Поделиться через


<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 в хранимое значение в 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 побитовой 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 из сохраненного значения в 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 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_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 не содержит зависимость для вызова функции. Разбивая возможную цепочку зависимостей, функция позволяет компилятору создавать более эффективный код.

См. также

<atomic>