ไลบรารี 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 มันตั้งค่าของแฟล็กเป็นอะตอมเป็นเท็จ |