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