<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 |
Описание |
---|---|
Описывает объект, выполняющий атомарных операций на сохраненный значение. |
|
Описание объекта, неделимым блоком, наборы и очищает флажок bool. |
перечислениям;
Name |
Описание |
---|---|
Символические имена, для операций синхронизации на расположения в памяти. Эти операции влияют на порядок назначения в одном потоке становятся видимыми в других. |
Функции
В следующем списке, функции, которые не заканчивается _explicit обладают семантикой соответствующий _explicit, за исключением того, что они имеют неявные аргументы memory_ordermemory_order_seq_cst.
Name |
Описание |
---|---|
Выполняет операцию атомарный сравнивать и обмена. |
|
Выполняет операцию атомарный сравнивать и обмена. |
|
Выполняет операцию слабое атомарное сравнивает и обмена. |
|
Выполняет операцию слабое атомарное сравнивает и обмена. |
|
Заменяет сохраненного значения. |
|
Заменяет сохраненного значения. |
|
Добавляет указанное значение в существующих сохраненного значения. |
|
Добавляет указанное значение в существующих сохраненного значения. |
|
Выполняет операцию побитового and на указанном и существующие значения, сохраненные значения. |
|
Выполняет операцию побитового and на указанном и существующие значения, сохраненные значения. |
|
Выполняет операцию побитового or на указанном и существующие значения, сохраненные значения. |
|
Выполняет операцию побитового or на указанном и существующие значения, сохраненные значения. |
|
Вычитает указанное значение из существующих сохраненного значения. |
|
Вычитает указанное значение из существующих сохраненного значения. |
|
Выполняет операцию побитового exclusive or на указанном и существующие значения, сохраненные значения. |
|
Выполняет операцию побитового exclusive or на указанном и существующие значения, сохраненные значения. |
|
Задает флажок в объекте atomic_flag в false. |
|
Задает флажок в объекте atomic_flag в false. |
|
Задает флажок в объекте atomic_flag в true. |
|
Задает флажок в объекте atomic_flag в true. |
|
Задает значения, хранящиеся в объекте atomic. |
|
Определяет, является ли атомарных операций в указанном объекте свободно от блокировку. |
|
Неделимым блоком, извлекает значение. |
|
Неделимым блоком, извлекает значение. |
|
Действует как загородка, задает требования к памяти порядок обнести вызывающий поток с выполнены сигнала обработчики в том же потоке. |
|
Неделимым блоком, сохраняет значение. |
|
Неделимым блоком, сохраняет значение. |
|
Действует как загородка, задает требования к памяти при упорядочивании по отношению к другим загородкам. |
|
Прерывает возможную цепочка зависимостей. |
См. также
Ссылки
Библиотека стандартных шаблонов