<atomic>
Определяет классы и классы шаблонов для использования при создании типы, поддерживающие атомарных операций.
#include <atomic>
Заметки
Примечание |
---|
В коде, компилировать с помощью /clr или /clr:pure, этот заголовок отключить. |
Атомарная операция содержит 2 ключевого свойства, помогающие использовать несколько потоков для правильной обработки объекта без использования блокировок мьютекса.
Так как атомарная операция нераздельна, вторая атомарная операция в одном объекте из различных потоков может получить состояние объекта только до или после первой атомарной операцией.
На основе его аргументе memory_order, атомарная операция, устанавливает требования для упорядочения видимости эффектов других атомарных операций в том же потоке.Поэтому он блокирует оптимизацию компилятора, нарушающие порядок требования.
В некоторых платформах, может оказаться невозможным эффективным реализовать атомарные операции для некоторых типов без использования блокировок mutex.Атомарный тип блокировка- free, если атомарные операции над этой использовании типа не блокируют.
Класс atomic_flag предоставляет минимальный атомарный тип, содержащий пометить bool.Свои операции всегда блокировка- free.
Класс atomic<Ty> шаблона сохраняет объект типа Ty аргумента и предоставляет атомарный доступ к этому сохраненное значение.Можно создать его экземпляр с помощью любого типа, который может быть скопирован с помощью memcpy и проверки на равенство с помощью memcmp.В частности, можно использовать с пользовательскими типами, которые удовлетворяют этим и во многих случаях с плавающей запятой ввода.
Шаблон также имеет специализаций для целочисленных типов и частично специализации для указателей.Эти специализации предоставляют дополнительные операции, которые не доступны через основной шаблон.
Специализации указателя
Специализации atomic<Ty *> частично применяются ко всем типам указателей.Они предоставляют методы арифметики указателя.
Объединенные специализации
Специализации atomic<integral> применяются ко всем объединенным типам.Они предоставляют дополнительные операции, которые не доступны через основной шаблон.
Каждый тип atomic<integral> имеет соответствующего макроса, который можно использовать в if directive для указания во время компиляции, является ли операции на этом типе блокировка- free.Если значение макроса нулю, то операции на типе не блокировка- свободна.Если значение равно 1, то операции могут быть блокировка- свободеном и проверка среды выполнения не требуется.Если значение равно 2, то операции блокировка- free.Можно использовать функцию atomic_is_lock_free для указания во время выполнения, является ли операции на типе блокировка- 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> |
Структуры
Имя |
Описание |
---|---|
Описывает объект, выполняющий атомарные операции на сохраненные значения. |
|
Описание объекта, которое атомарным образом наборы и снимите флажки пометить bool. |
Перечисленения
Имя |
Описание |
---|---|
Предоставляет символические имена для операций синхронизации на участках памяти.Эти операции влияют на способ назначения в одном потоке отображаются в других. |
Функции
В следующем списке, функции, не завершиться в _explicit имеют семантику соответствующий _explicit, за исключением того, что они имеют неявные аргументы memory_ordermemory_order_seq_cst.
Имя |
Описание |
---|---|
Выполняет сравнение и атомарный обменяйте операции. |
|
Выполняет сравнение и атомарный обменяйте операции. |
|
Выполняет сравнение и слабых атомарный обменяйте операции. |
|
Выполняет сравнение и слабых атомарный обменяйте операции. |
|
Заменяет сохраненное значение. |
|
Заменяет сохраненное значение. |
|
Добавляет указанное значение к существующему, хранящееся значение. |
|
Добавляет указанное значение к существующему, хранящееся значение. |
|
Выполняет побитовую and на указанном значении и существующих сохраненные значения. |
|
Выполняет побитовую and на указанном значении и существующих сохраненные значения. |
|
Выполняет побитовую or на указанном значении и существующих сохраненные значения. |
|
Выполняет побитовую or на указанном значении и существующих сохраненные значения. |
|
Вычитает указанное значение из существующих хранимых значений. |
|
Вычитает указанное значение из существующих хранимых значений. |
|
Выполняет побитовую exclusive or на указанном значении и существующих сохраненные значения. |
|
Выполняет побитовую exclusive or на указанном значении и существующих сохраненные значения. |
|
Устанавливает пометить в объекте atomic_flag к false. |
|
Устанавливает пометить в объекте atomic_flag к false. |
|
Устанавливает пометить в объекте atomic_flag к true. |
|
Устанавливает пометить в объекте atomic_flag к true. |
|
Задает сохраненное значение в объекте atomic. |
|
Определяет, является ли атомарных операций в указанном объекте блокировка- free. |
|
Атомарным образом извлекает значение. |
|
Атомарным образом извлекает значение. |
|
Действует как загородка, устанавливает требования к памяти при упорядочивании между загородками в вызывающем потоке, который содержит обработчики, выполняемых ввода в том же потоке. |
|
Атомарным образом сохраняет значение. |
|
Атомарным образом сохраняет значение. |
|
Действует как загородка, устанавливает требования к памяти при упорядочивании по отношению к другим загородкам. |
|
Разрывает цепочку возможной зависимости. |
См. также
Ссылки
Стандартная библиотека шаблонов