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

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

2
อะไรรับประกันกับ C ++ std :: atomic ในระดับโปรแกรมเมอร์?
ฉันได้ฟังและอ่านบทความพูดคุยและคำถามเกี่ยวกับสแต็คโอเวอร์โฟลว์หลายเรื่องstd::atomicแล้วและฉันต้องการให้แน่ใจว่าฉันเข้าใจดี เนื่องจากฉันยังสับสนอยู่เล็กน้อยกับบรรทัดแคชเขียนการมองเห็นเนื่องจากความล่าช้าที่เป็นไปได้ในโปรโตคอลการเชื่อมโยงกันของแคช MESI (หรือที่ได้รับ) บัฟเฟอร์ที่เก็บบัฟเฟอร์คิวที่ไม่ถูกต้องและอื่น ๆ ฉันอ่าน x86 มีโมเดลหน่วยความจำที่แรงกว่าและหากการตรวจสอบความถูกต้องแคชล่าช้า x86 สามารถยกเลิกการดำเนินการที่เริ่มต้นได้ แต่ตอนนี้ฉันสนใจเฉพาะสิ่งที่ฉันควรถือว่าเป็นโปรแกรมเมอร์ C ++ ซึ่งเป็นอิสระจากแพลตฟอร์ม [T1: thread1 T2: thread2 V1: ตัวแปรอะตอมมิกที่ใช้ร่วมกัน] ฉันเข้าใจว่า std :: atomic รับประกันว่า (1) ไม่มีการแย่งข้อมูลในตัวแปร (ต้องขอบคุณการเข้าถึงสายแคชเท่านั้น) (2) หน่วยความจำที่เราใช้นั้นขึ้นอยู่กับหน่วยความจำที่รับประกันว่า (มีสิ่งกีดขวาง) ซึ่งความสอดคล้องตามลำดับจะเกิดขึ้น (3) หลังจากการเขียนอะตอมมิก (V1) บน T1 อะตอมมิก RMW (V1) บน T2 จะสอดคล้องกัน (บรรทัดแคชจะได้รับการอัพเดตด้วยค่าที่เขียนบน T1) แต่เมื่อไพรเมอร์เชื่อมโยงกันถึงแคช ความหมายของสิ่งเหล่านี้คือโดยค่าเริ่มต้นการโหลดสามารถดึงข้อมูลเก่า (ถ้าคำขอการตรวจสอบความถูกต้องที่สอดคล้องกันกำลังนั่งอยู่ในคิวการตรวจสอบความถูกต้อง) ดังนั้นถูกต้องหรือไม่ …

1
การใช้ C ++ AtomicInt นี้ถูกต้องหรือไม่
สถานที่ตั้ง: ผมทำงานกับ ARM ฝังตัว (เกือบเปลือยโลหะ) สภาพแวดล้อมที่ฉันไม่ได้มี C ++ 11 (กับstd::atomic<int>) ใช้ได้ดังนั้นโปรดหลีกเลี่ยงคำตอบเช่น " เพียงแค่ใช้มาตรฐาน C ++std::atomic<int> " ฉันไม่สามารถ การใช้งาน AtomicInt ARM นี้ถูกต้องหรือไม่ (ถือว่าสถาปัตยกรรม ARM คือARMv7-A ) คุณเห็นปัญหาการซิงโครไนซ์บ้างไหม? มันvolatileจำเป็น / มีประโยชน์หรือไม่? // File: atomic_int.h #ifndef ATOMIC_INT_H_ #define ATOMIC_INT_H_ #include <stdint.h> class AtomicInt { public: AtomicInt(int32_t init = 0) : atom(init) { } …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.