Cpp Standard Library 简明教程

C++ Library - <atomic>

Introduction

这些类型封装了一个值,其访问保证不会导致数据竞争,并且可用于同步不同线程之间的内存访问,并且原子库提供了精细原子操作的组件,允许无锁并发编程。对于涉及同一对象的任何其他原子操作而言,每个原子操作都是不可分的。

These are types that encapsulate a value whose access is guaranteed to not cause data races and can be used to synchronize memory accesses among different threads and he atomic library provides components for fine-grained atomic operations allowing for lockless concurrent programming. Each atomic operation is indivisible with regards to any other atomic operation that involves the same object.

Atomic type

Sr.No.

Member types & Definition

1

atomicAtomic class template and specializations for bool, integral, and pointer types

C-style atomic types

以下原类型也在此标题中定义。

The following are atomic types and also defined in this header.

contained type

atomic type

description

bool

atomic_bool

char

atomic_char

atomics for fundamental integral types. These are either typedefs of the corresponding full specialization of the atomic class template or a base class of such specialization.

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

atomics for width-based integrals (those defined in <cinttypes>). Each of these is either an alias of one of the above atomics for fundamental integral types or of a full specialization of the atomic class template with an extended integral type. Where N is one in 8, 16, 32, 64, or any other type width supported by the library.

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

Operations on atomic types

Sr.No.

Operations & Definition

1

atomic_is_lock_freeIt is used to checks if the atomic type’s operations are lock-free

2

atomic_store & atomic_store_explicitIt automically replaces the value of the atomic object with a non-atomic argument

3

atomic_load & atomic_load_explicitIt atomically obtains the value stored in an atomic object

4

atomic_exchange & atomic_exchange_explicitIt atomically replaces the value of the atomic object with non-atomic argument and returns the old value of the atomic

5

atomic_compare_exchange_weak & atomic_compare_exchange_weak_explicit & atomic_compare_exchange_strong & atomic_compare_exchange_strong_explicitIt atomically compares the value of the atomic object with non-atomic argument and performs atomic exchange if equal or atomic load if not

6

atomic_fetch_add & atomic_fetch_add_explicitIt adds a non-atomic value to an atomic object and obtains the previous value of the atomic

7

atomic_fetch_sub & atomic_fetch_sub_explicitIt subtracts a non-atomic value from an atomic object and obtains the previous value of the atomic

8

atomic_fetch_and & atomic_fetch_and_explicitIt replaces the atomic object with the result of logical AND with a non-atomic argument and obtains the previous value of the atomic

9

atomic_fetch_or & atomic_fetch_or_explicitIt replaces the atomic object with the result of logical OR with a non-atomic argument and obtains the previous value of the atomic

10

atomic_fetch_xor & atomic_fetch_xor_explicitIt replaces the atomic object with the result of logical XOR with a non-atomic argument and obtains the previous value of the atomic

Flag type and operations

Sr.No.

Flag type & Definition

1

atomic_flagThe lock-free boolean atomic type

2

atomic_flag_test_and_set & atomic_flag_test_and_set_explicitIt atomically sets the flag to true and returns its previous value

3

atomic_flag_clear & atomic_flag_clear_explicitIt atomically sets the value of the flag to false