ไลบรารี C ++ - <atomic>

บทนำ

ประเภทเหล่านี้เป็นประเภทที่ห่อหุ้มค่าซึ่งการเข้าถึงได้รับการรับรองว่าจะไม่ทำให้เกิดการแข่งขันของข้อมูลและสามารถใช้เพื่อซิงโครไนซ์การเข้าถึงหน่วยความจำระหว่างเธรดต่างๆและไลบรารีอะตอมของเขามีส่วนประกอบสำหรับการทำงานของอะตอมแบบละเอียดเพื่อให้สามารถเขียนโปรแกรมพร้อมกันได้โดยไม่ต้องล็อก การดำเนินการของอะตอมแต่ละตัวไม่สามารถแบ่งแยกได้เกี่ยวกับการดำเนินการของอะตอมอื่น ๆ ที่เกี่ยวข้องกับวัตถุเดียวกัน

ประเภทอะตอม

ซีเนียร์ ประเภทสมาชิกและคำจำกัดความ
1 ปรมาณู

เทมเพลตและความเชี่ยวชาญระดับอะตอมสำหรับประเภทบูลอินทิกรัลและพอยน์เตอร์

ประเภทอะตอมแบบ 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_t atomic_int_least_t
uint_least_t atomic_uint_least_t
int_fast_t atomic_int_fast_t
uint_fast_t atomic_uint_fast_t
intptr_t atomic_intptr_t
uintptr_t atomic_uintptr_t
size_t atomic_size_t
ptrdiff_t atomic_ptrdiff_t

การดำเนินการเกี่ยวกับประเภทของอะตอม

&
ซีเนียร์ ปฏิบัติการและคำจำกัดความ
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

มันแทนที่วัตถุอะตอมด้วยผลลัพธ์ของตรรกะ AND ด้วยอาร์กิวเมนต์ที่ไม่ใช่อะตอมและได้รับค่าก่อนหน้าของอะตอม

9 atomic_fetch_or & atomic_fetch_or_explicit

มันแทนที่วัตถุอะตอมด้วยผลลัพธ์ของตรรกะ OR ด้วยอาร์กิวเมนต์ที่ไม่ใช่อะตอมและได้รับค่าก่อนหน้าของอะตอม

10 atomic_fetch_xor & atomic_fetch_xor_explicit

แทนที่วัตถุอะตอมด้วยผลลัพธ์ของ XOR ตรรกะด้วยอาร์กิวเมนต์ที่ไม่ใช่อะตอมและได้รับค่าก่อนหน้าของอะตอม

ประเภทแฟล็กและการดำเนินการ

ซีเนียร์ ประเภทแฟล็กและคำจำกัดความ
1 atomic_flag

ประเภทอะตอมบูลีนที่ไม่มีการล็อค

2 atomic_flag_test_and_set & atomic_flag_test_and_set_explicit

มันตั้งค่าแฟล็กเป็นค่าจริงและส่งกลับค่าก่อนหน้า

3 atomic_flag_clear & atomic_flag_clear_explicit

มันตั้งค่าของแฟล็กเป็นอะตอมเป็นเท็จ