Библиотека C ++ - <атомарный>

Введение

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

Атомный тип

Sr. No. Типы членов и определение
1 атомный

Шаблон атомарного класса и специализации для типов bool, целочисленных и указателей

Атомарные типы в стиле C

Следующие атомарные типы также определены в этом заголовке.

атомика для фундаментальных интегральных типов .

Это либо определения типов соответствующей полной специализации атомный шаблон класса или базовый класс такой специализации.

атомика для интегралов на основе ширины (определенных в<cinttypes>).

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

Где N - это один из 8, 16, 32, 64 или любой другой ширины типа, поддерживаемой библиотекой.

содержащийся тип атомный тип описание
bool atomic_bool
char atomic_char
signed char atomic_schar
unsigned char atomic_uchar
short atomic_short
unsigned short atomic_ushort
int atomic_int
unsigned int atomic_uint
long atomic_long
unsigned long atomic_ulong
long long atomic_llong
unsigned long long atomic_ullong
wchar_t atomic_wchar_t
char16_t atomic_char16_t
char32_t atomic_char32_t
intmax_t atomic_intmax_t
uintmax_t atomic_uintmax_t
int_leastN_t atomic_int_leastN_t
uint_leastN_t atomic_uint_leastN_t
int_fastN_t atomic_int_fastN_t
uint_fastN_t atomic_uint_fastN_t
intptr_t atomic_intptr_t
uintptr_t atomic_uintptr_t
size_t atomic_size_t
ptrdiff_t atomic_ptrdiff_t

Операции с атомарными типами

&
Sr. No. Операции и определение
1 atomic_is_lock_free

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

2 atomic_store и atomic_store_explicit

Он автоматически заменяет значение атомарного объекта неатомарным аргументом

3 atomic_load и atomic_load_explicit

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

4 atomic_exchange и atomic_exchange_explicit

Он атомарно заменяет значение атомарного объекта неатомарным аргументом и возвращает старое значение атомарного объекта.

5 atomic_compare_exchange_weak и atomic_compare_exchange_weak_explicit и atomic_compare_exchange_strong и atomic_compare_exchange_strong_explicit

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

6 atomic_fetch_add и atomic_fetch_add_explicit

Он добавляет неатомарное значение к атомарному объекту и получает предыдущее значение атомарного объекта.

7 atomic_fetch_sub и atomic_fetch_sub_explicit

Он вычитает неатомарное значение из атомарного объекта и получает предыдущее значение атомарного объекта.

8 atomic_fetch_and & atomic_fetch_and_explicit

Он заменяет атомарный объект результатом логического И неатомарным аргументом и получает предыдущее значение атомарного

9 atomic_fetch_or и atomic_fetch_or_explicit

Он заменяет атомарный объект результатом логического ИЛИ на неатомарный аргумент и получает предыдущее значение атомарного

10 atomic_fetch_xor и atomic_fetch_xor_explicit

Он заменяет атомарный объект результатом логического XOR с неатомарным аргументом и получает предыдущее значение атомарного

Тип флага и операции

Sr. No. Тип и определение флага
1 atomic_flag

Булевский атомарный тип без блокировки

2 atomic_flag_test_and_set и atomic_flag_test_and_set_explicit

Он атомарно устанавливает флаг в значение true и возвращает его предыдущее значение.

3 atomic_flag_clear и atomic_flag_clear_explicit

Он атомарно устанавливает значение флага в false