คำถามติดแท็ก stdatomic

1
เหตุใด std :: atomic constructor จึงมีความแตกต่างใน C ++ 14 และ C ++ 17
ฉันทำงานในโครงการที่มี C ++ 11 และฉันลองใช้รหัสต่อไปนี้ #include <atomic> struct A { std::atomic_int idx = 1; }; int main() { return 0; } ฉันได้รับข้อผิดพลาดของคอมไพเลอร์ error: use of deleted function 'std::__atomic_base<_IntTp>::__atomic_base(const std::__atomic_base<_IntTp>&) [with _ITp = int]' std::atomic_int idx = 1; ^ ผลลัพธ์เดียวกันคือกับ C ++ 14 เมื่อฉันเปลี่ยนเป็น C ++ 17 มันใช้งานได้: wandbox ฉันตรวจสอบความแตกต่างของ cppreference: …
19 c++  c++14  c++17  stdatomic 

4
วิธีการบรรลุอุปสรรค StoreLoad ใน C ++ 11?
ฉันต้องการเขียนโค้ดแบบพกพา (Intel, ARM, PowerPC ... ) ซึ่งแก้ปัญหาคลาสสิก: Initially: X=Y=0 Thread A: X=1 if(!Y){ do something } Thread B: Y=1 if(!X){ do something } ซึ่งเป้าหมายคือการหลีกเลี่ยงสถานการณ์ที่หัวข้อทั้งสองจะทำ something(ไม่เป็นไรหากไม่มีสิ่งใดทำงานนี่ไม่ใช่กลไกที่ทำงานเหมือนครั้งเดียว) โปรดแก้ไขให้ฉันถ้าคุณเห็นข้อบกพร่องบางอย่างในการให้เหตุผลด้านล่าง ฉันรู้ว่าฉันสามารถบรรลุเป้าหมายด้วยmemory_order_seq_cstอะตอมstoreและloads ดังต่อไปนี้: std::atomic<int> x{0},y{0}; void thread_a(){ x.store(1); if(!y.load()) foo(); } void thread_b(){ y.store(1); if(!x.load()) bar(); } ซึ่งบรรลุเป้าหมายเพราะจะต้องมีคำสั่งซื้อทั้งหมดเพียงคำสั่งเดียวใน {x.store(1), y.store(1), y.load(), x.load()}เหตุการณ์ซึ่งจะต้องเห็นด้วยกับ "ขอบ" ของคำสั่งโปรแกรม: x.store(1) …

1
C11 Atomic Acquire / Release และ x86_64 ขาดการเชื่อมโยงโหลด / จัดเก็บ?
ฉันกำลังดิ้นรนกับมาตรา 5.1.2.4 ของมาตรฐาน C11 โดยเฉพาะความหมายของการเปิดตัว / การได้มา ฉันทราบว่าhttps://preshing.com/20120913/acquire-and-release-semantics/ (ในจำนวนอื่น ๆ ) ระบุว่า: ... ความหมายของการวางจำหน่ายป้องกันการเรียงลำดับหน่วยความจำของการปล่อยการเขียนด้วยการดำเนินการอ่านหรือการเขียนที่นำหน้ามันตามลำดับของโปรแกรม ดังนั้นสำหรับต่อไปนี้: typedef struct test_struct { _Atomic(bool) ready ; int v1 ; int v2 ; } test_struct_t ; extern void test_init(test_struct_t* ts, int v1, int v2) { ts->v1 = v1 ; ts->v2 = v2 ; atomic_store_explicit(&ts->ready, false, …

3
ทำไม std :: atomic <T> :: is_lock_free () ไม่คงที่เช่นเดียวกับ constexpr
ใครสามารถบอกฉันว่า std :: atomic :: is_lock_free () ไม่คงที่เช่นเดียวกับ constexpr? มีมันไม่คงที่และ / หรือเป็น constexpr ไม่ได้ทำให้รู้สึกสำหรับฉัน
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.