Библиотека 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_least N_t |
atomic_int_least N_t |
|
uint_least N_t |
atomic_uint_least N_t |
|
int_fast N_t |
atomic_int_fast N_t |
|
uint_fast N_t |
atomic_uint_fast N_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 |