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


<atomic>

Определяет классы и классы шаблонов для использования типы, которые поддерживают создание атомарных операций.

#include <atomic>

Заметки

Примечание

В коде, компилироваться с помощью /clr или /clr:pure, этот заголовок блокируется.

Атомарная операция имеет 2 ключевых свойств, помогающие использовать несколько потоков для правильной обработки объект без использования мьютекс блокируют.

  • Поскольку атомарная операция нераздельна, вторая атомарная операция на этом объекте из разных потоков может получить состояние объекта только до или после первой атомарной операцией.

  • На основе его аргумент memory_order, атомарная операция задает порядок требования для видимости эффектов других атомарных операций в том же потоке. Следовательно, она блокирует оптимизаций, которые нарушают порядок требования.

В некоторых платформах, может оказаться невозможным эффективно реализовать атомарные операции для некоторых типов без использования mutex блокирует. Атомарный тип может от блокировку при отсутствии атомарные операции с этими использовании типа не блокируют.

Класс atomic_flag предоставляет минимальный атомарный тип, который содержит флажок bool. Его операции всегда свободно от блокировку.

Класс шаблона atomic<Ty> сохраняет объект его типа Ty аргумента и предоставляет атомарный доступ со сведениями, хранящимися значение. Можно создать его с помощью любого типа, который может быть скопирован с помощью memcpy и выполняется на равенство, используя memcmp. В частности, его можно использовать с пользовательскими типами, которые удовлетворяют этим требованиям, и во многих случаях с плавающей запятой.

Шаблон также содержит набор специализаций для целочисленных типов и частично специализацию для указателей. Эти специализации предоставляют дополнительные операции, которые не доступны через первичного шаблона.

Специализации указателя

Специализации atomic<Ty *> частично применяются ко всем типам указателей. Они предоставляют методы для арифметики указателей.

Целочисленные специализации

Специализации atomic<integral> применяются ко всем целочисленным типам. Они предоставляют дополнительные операции, которые не доступны через первичного шаблона.

Каждый тип atomic<integral> имеет соответствующего макроса, который можно использовать в if directive определить во время компиляции ли операции для данного типа свободно от блокировку. Если значение макроса равно нулю, то операции типа не свободно от блокировку. Если значение равно 1, то операции могут быть свободно от блокировку и проверка среды выполнения не требуется. Если значение равно 2, то операции свободно от блокировку. Можно использовать функцию atomic_is_lock_free определить ли во время выполнения операции в типе свободно от блокировку.

Для каждого из целочисленных типов с именем, соответствующим атомарный тип, управляющий объект, целочисленного типа. Каждый тип atomic_integral имеет тот же набор функций-членов, совпадающие с именами соответствующих создание atomic<Ty> и может быть передан в любых функций, не являющихся членами атомарным.

Тип atomic_integral

Целочисленный тип

макрос atomic_is_lock_free

atomic_char

char

ATOMIC_CHAR_LOCK_FREE

atomic_schar

signed char

ATOMIC_CHAR_LOCK_FREE

atomic_uchar

unsigned char

ATOMIC_CHAR_LOCK_FREE

atomic_char16_t

char16_t

ATOMIC_CHAR16_T_LOCK_FREE

atomic_char32_t

char32_t

ATOMIC_CHAR32_T_LOCK_FREE

atomic_wchar_t

wchar_t

ATOMIC_WCHAR_T_LOCK_FREE

atomic_short

short

ATOMIC_SHORT_LOCK_FREE

atomic_ushort

unsigned short

ATOMIC_SHORT_LOCK_FREE

atomic_int

int

ATOMIC_INT_LOCK_FREE

atomic_uint

unsigned int

ATOMIC_INT_LOCK_FREE

atomic_long

long

ATOMIC_LONG_LOCK_FREE

atomic_ulong

unsigned long

ATOMIC_LONG_LOCK_FREE

atomic_llong

long long

ATOMIC_LLONG_LOCK_FREE

atomic_ullong

unsigned long long

ATOMIC_LLONG_LOCK_FREE

Имена typedef существуют для специализаций атомарного шаблона для некоторых типов, определенных в заголовке <inttypes.h>.

Атомарный тип

Имя typedef

atomic_int8_t

atomic<int8_t>

atomic_uint8_t

atomic<uint8_t>

atomic_int16_t

atomic<int16_t>

atomic_uint16_t

atomic<uint16_t>

atomic_int32_t

atomic<int32_t>

atomic_uint32_t

atomic<uint32_t>

atomic_int64_t

atomic<int64_t>

atomic_uint64_t

atomic<uint64_t>

atomic_int_least8_t

atomic<int_least8_t>

atomic_uint_least8_t

atomic<uint_least8_t>

atomic_int_least16_t

atomic<int_least16_t>

atomic_uint_least16_t

atomic<uint_least16_t>

atomic_int_least32_t

atomic<int_least32_t>

atomic_uint_least32_t

atomic<uint_least32_t>

atomic_int_least64_t

atomic<int_least64_t>

atomic_uint_least64_t

atomic<uint_least64_t>

atomic_int_fast8_t

atomic<int_fast8_t>

atomic_uint_fast8_t

atomic<uint_fast8_t>

atomic_int_fast16_t

atomic<int_fast16_t>

atomic_uint_fast16_

atomic<uint_fast16_t>

atomic_int_fast32_t

atomic<int_fast32_t>

atomic_uint_fast32_t

atomic<uint_fast32_t>

atomic_int_fast64_t

atomic<int_fast64_t>

atomic_uint_fast64_t

atomic<uint_fast64_t>

atomic_intptr_t

atomic<intptr_t>

atomic_uintptr_t

atomic<uintptr_t>

atomic_size_t

atomic<size_t>

atomic_ptrdiff_t

atomic<ptrdiff_t>

atomic_intmax_t

atomic<intmax_t>

atomic_uintmax_t

atomic<uintmax_t>

структурам;

Name

Описание

Структура atomic

Описывает объект, выполняющий атомарных операций на сохраненный значение.

Структура atomic_flag

Описание объекта, неделимым блоком, наборы и очищает флажок bool.

перечислениям;

Name

Описание

Перечисление memory_order

Символические имена, для операций синхронизации на расположения в памяти. Эти операции влияют на порядок назначения в одном потоке становятся видимыми в других.

Функции

В следующем списке, функции, которые не заканчивается _explicit обладают семантикой соответствующий _explicit, за исключением того, что они имеют неявные аргументы memory_ordermemory_order_seq_cst.

Name

Описание

Функция 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

Выполняет операцию побитового and на указанном и существующие значения, сохраненные значения.

Функция atomic_fetch_and_explicit

Выполняет операцию побитового and на указанном и существующие значения, сохраненные значения.

Функция atomic_fetch_or

Выполняет операцию побитового or на указанном и существующие значения, сохраненные значения.

Функция atomic_fetch_or_explicit

Выполняет операцию побитового or на указанном и существующие значения, сохраненные значения.

Функция atomic_fetch_sub

Вычитает указанное значение из существующих сохраненного значения.

Функция atomic_fetch_sub_explicit

Вычитает указанное значение из существующих сохраненного значения.

Функция atomic_fetch_xor

Выполняет операцию побитового exclusive or на указанном и существующие значения, сохраненные значения.

Функция atomic_fetch_xor_explicit

Выполняет операцию побитового exclusive or на указанном и существующие значения, сохраненные значения.

Функция atomic_flag_clear

Задает флажок в объекте atomic_flag в false.

Функция atomic_flag_clear_explicit

Задает флажок в объекте atomic_flag в false.

Функция atomic_flag_test_and_set

Задает флажок в объекте atomic_flag в true.

Функция atomic_flag_test_and_set_explicit

Задает флажок в объекте atomic_flag в true.

Функция atomic_init

Задает значения, хранящиеся в объекте atomic.

atomic_is_lock_free - функция

Определяет, является ли атомарных операций в указанном объекте свободно от блокировку.

Функция atomic_load

Неделимым блоком, извлекает значение.

Функция atomic_load_explicit

Неделимым блоком, извлекает значение.

Функция atomic_signal_fence

Действует как загородка, задает требования к памяти порядок обнести вызывающий поток с выполнены сигнала обработчики в том же потоке.

Функция atomic_store

Неделимым блоком, сохраняет значение.

Функция atomic_store_explicit

Неделимым блоком, сохраняет значение.

Функция atomic_thread_fence

Действует как загородка, задает требования к памяти при упорядочивании по отношению к другим загородкам.

Функция kill_dependency

Прерывает возможную цепочка зависимостей.

См. также

Ссылки

Библиотека стандартных шаблонов

Другие ресурсы

Файлы заголовков стандартных библиотек C++