Perpustakaan C ++ - <atomic>

pengantar

Ini adalah tipe yang merangkum nilai yang aksesnya dijamin tidak menyebabkan data race dan dapat digunakan untuk menyinkronkan akses memori di antara utas yang berbeda dan pustaka atomnya menyediakan komponen untuk operasi atom terperinci yang memungkinkan pemrograman bersamaan tanpa kunci. Setiap operasi atom tidak dapat dibagi sehubungan dengan operasi atom lainnya yang melibatkan objek yang sama.

Tipe atom

Sr.No. Jenis & Definisi Anggota
1 atom

Template kelas atom dan spesialisasi untuk tipe bool, integral, dan pointer

Tipe atom tipe C.

Berikut ini adalah jenis atom dan juga ditentukan di header ini.

atomics untuk tipe integral fundamental .

Ini adalah salah satu typedef dari spesialisasi lengkap terkait dari atom template kelas atau kelas dasar dari spesialisasi tersebut.

atomics untuk integral berbasis lebar (yang didefinisikan di<cinttypes>).

Masing-masing merupakan alias dari salah satu atomika di atas untuk tipe integral fundamental atau spesialisasi penuh dariatomtemplate kelas dengan tipe integral diperpanjang .

Di mana N adalah satu dalam 8, 16, 32, 64, atau lebar jenis lainnya yang didukung oleh pustaka.

tipe yang terkandung tipe atom deskripsi
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

Operasi pada tipe atom

&
Sr.No. Operasi & Definisi
1 atomic_is_lock_free

Ini digunakan untuk memeriksa apakah operasi tipe atom bebas kunci

2 atomic_store & atomic_store_explicit

Ini secara otomatis menggantikan nilai objek atom dengan argumen non-atom

3 atomic_load & atomic_load_explicit

Ini secara atomis memperoleh nilai yang disimpan dalam objek atom

4 atomic_exchange & atomic_exchange_explicit

Ini secara atomik menggantikan nilai objek atom dengan argumen non-atom dan mengembalikan nilai lama atom

5 atomic_compare_exchange_weak & atomic_compare_exchange_weak_explicit & atomic_compare_exchange_strong & atomic_compare_exchange_strong_explicit

Ini secara atomik membandingkan nilai objek atom dengan argumen non-atom dan melakukan pertukaran atom jika sama atau beban atom jika tidak.

6 atomic_fetch_add & atomic_fetch_add_explicit

Ia menambahkan nilai non-atom ke objek atom dan mendapatkan nilai atom sebelumnya

7 atomic_fetch_sub & atomic_fetch_sub_explicit

Ini mengurangi nilai non-atom dari objek atom dan mendapatkan nilai atom sebelumnya

8 atomic_fetch_and & atomic_fetch_and_explicit

Ini menggantikan objek atom dengan hasil logika AND dengan argumen non-atomik dan mendapatkan nilai atom sebelumnya

9 atomic_fetch_or & atomic_fetch_or_explicit

Ini menggantikan objek atom dengan hasil logika OR dengan argumen non-atom dan mendapatkan nilai atom sebelumnya

10 atomic_fetch_xor & atomic_fetch_xor_explicit

Ini menggantikan objek atom dengan hasil XOR logis dengan argumen non-atom dan mendapatkan nilai atom sebelumnya

Jenis bendera dan operasi

Sr.No. Jenis bendera & Definisi
1 atomic_flag

Jenis atom boolean bebas kunci

2 atomic_flag_test_and_set & atomic_flag_test_and_set_explicit

Ini secara atomis menetapkan bendera ke true dan mengembalikan nilai sebelumnya

3 atomic_flag_clear & atomic_flag_clear_explicit

Ini secara atomis menetapkan nilai bendera menjadi salah