Thư viện C ++ - <atomic>

Giới thiệu

Đây là các kiểu đóng gói một giá trị mà quyền truy cập được đảm bảo không gây ra sự chạy đua dữ liệu và có thể được sử dụng để đồng bộ hóa các truy cập bộ nhớ giữa các luồng khác nhau và thư viện nguyên tử cung cấp các thành phần cho các hoạt động nguyên tử chi tiết cho phép lập trình đồng thời không khóa. Mỗi hoạt động nguyên tử là không thể phân chia đối với bất kỳ hoạt động nguyên tử nào khác liên quan đến cùng một đối tượng.

Loại nguyên tử

Sr.No. Loại thành viên & Định nghĩa
1 nguyên tử

Mẫu lớp nguyên tử và các chuyên môn cho các loại bool, tích phân và con trỏ

Các loại nguyên tử kiểu C

Sau đây là các loại nguyên tử và cũng được định nghĩa trong tiêu đề này.

nguyên tử cho các loại tích phân cơ bản .

Đây là các typedef của chuyên môn đầy đủ tương ứng của nguyên tử mẫu lớp hoặc một lớp cơ sở của chuyên ngành đó.

nguyên tử cho tích phân dựa trên chiều rộng (những nguyên tử được định nghĩa trong<cinttypes>).

Mỗi trong số này hoặc là bí danh của một trong các nguyên tử ở trên cho các loại tích phân cơ bản hoặc của một chuyên ngành đầy đủ củanguyên tửmẫu lớp với kiểu tích phân mở rộng .

Trong đó N là một trong 8, 16, 32, 64 hoặc bất kỳ chiều rộng kiểu nào khác được thư viện hỗ trợ.

loại chứa loại nguyên tử sự miêu tả
bool nguyên tử_bool
char nguyên tử_char
signed char nguyên tử_sạc
unsigned char nguyên tử_uchar
short nguyên tử_short
unsigned short atom_ushort
int nguyên tử
unsigned int nguyên tử
long atom_long
unsigned long atom_ulong
long long atom_llong
unsigned long long atom_ullong
wchar_t nguyên tử_wchar_t
char16_t nguyên tử_char16_t
char32_t nguyên tử_char32_t
intmax_t nguyên tử_intmax_t
uintmax_t nguyên tử_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 nguyên tử_intptr_t
uintptr_t nguyên tử_uintptr_t
size_t nguyên tử_size_t
ptrdiff_t atom_ptrdiff_t

Hoạt động trên các loại nguyên tử

&
Sr.No. Hoạt động & Định nghĩa
1 atom_is_lock_free

Nó được sử dụng để kiểm tra xem hoạt động của loại nguyên tử có bị khóa không

2 atom_store & atom_store_explicit

Nó tự động thay thế giá trị của đối tượng nguyên tử bằng đối số phi nguyên tử

3 atom_load & atom_load_explicit

Nó lấy nguyên tử giá trị được lưu trữ trong một đối tượng nguyên tử

4 atom_exchange & atom_exchange_explicit

Nó thay thế nguyên tử giá trị của đối tượng nguyên tử bằng đối số phi nguyên tử và trả về giá trị cũ của nguyên tử

5 atom_compare_exchange_weak & atom_compare_exchange_weak_explicit & atom_compare_exchange_strong & atom_compare_exchange_strong_explicit

Nó so sánh về mặt nguyên tử giá trị của đối tượng nguyên tử với đối số phi nguyên tử và thực hiện trao đổi nguyên tử nếu bằng hoặc tải nguyên tử nếu không

6 nguyên tử_fetch_add & nguyên tử_fetch_add_explicit

Nó thêm một giá trị không phải nguyên tử vào một đối tượng nguyên tử và nhận được giá trị trước đó của nguyên tử

7 nguyên tử_fetch_sub & nguyên tử_fetch_sub_explicit

Nó trừ đi một giá trị không phải nguyên tử từ một đối tượng nguyên tử và nhận được giá trị trước đó của nguyên tử

số 8 nguyên tử_fetch_and & nguyên tử_fetch_and_explicit

Nó thay thế đối tượng nguyên tử bằng kết quả của logic AND bằng đối số phi nguyên tử và nhận được giá trị trước đó của nguyên tử

9 atom_fetch_or & atom_fetch_or_explicit

Nó thay thế đối tượng nguyên tử bằng kết quả của OR logic bằng một đối số không phải nguyên tử và nhận được giá trị trước đó của nguyên tử

10 nguyên tử_fetch_xor & nguyên tử_fetch_xor_explicit

Nó thay thế đối tượng nguyên tử bằng kết quả của XOR logic với đối số phi nguyên tử và nhận được giá trị trước đó của nguyên tử

Loại cờ và hoạt động

Sr.No. Loại cờ & Định nghĩa
1 atom_flag

Loại nguyên tử boolean không có khóa

2 atom_flag_test_and_set & atom_flag_test_and_set_explicit

Về mặt nguyên tử, nó đặt cờ thành true và trả về giá trị trước đó của nó

3 atom_flag_clear & atom_flag_clear_explicit

Về cơ bản, nó đặt giá trị của cờ thành false