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


<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>

Структуры

Имя

Описание

атомарное строение

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

структура atomic_flag

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

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

Имя

Описание

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

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

Функции

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

Имя

Описание

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

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

функция atomic_load

Атомарным образом извлекает значение.

atomic_load_explicit функция

Атомарным образом извлекает значение.

функция atomic_signal_fence

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

функция atomic_store

Атомарным образом сохраняет значение.

atomic_store_explicit функция

Атомарным образом сохраняет значение.

функция atomic_thread_fence

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

функция kill_dependency

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

См. также

Ссылки

Стандартная библиотека шаблонов

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

Файлы заголовков