ฉันมีตัวแปรในหน่วยความจำที่ใช้ร่วมกัน x บนระบบตัวประมวลผลหลายตัว
void MyFunction(volatile int* x) {
if (*x != 0) {
// do something
}
}
กระบวนการอื่นๆ (อาจใช้โปรเซสเซอร์ที่แตกต่างกัน) จะถูกเขียนไปยัง x โดยใช้การดำเนินการอะตอมมิกในตัว gcc เช่น __sync_bool_compare_and_swap เป็นต้น
ฉันคิดว่าฉันกำลังประสบปัญหาการทำงานพร้อมกันของแคช ซึ่งบางครั้งอาจต้องใช้เวลาสักครู่ก่อนที่ x จะได้รับการอัปเดตด้วยค่าใหม่ในที่สุด
สิ่งที่ฉันต้องการคือ atomic_compare ชนิดหนึ่ง (โดยไม่ต้องสลับ) หากมีสิ่งนั้นอยู่? หรือ "อะตอมอ่าน" วิธีที่เร็วที่สุดในการทำเช่นนี้คืออะไร? (หลีกเลี่ยง mutexes, locks ฯลฯ)
ขอบคุณ
แก้ไข:
ฉันเพิ่งรู้ว่าวิธีแก้ปัญหาที่ค่อนข้างแฮ็กคือการใช้ __sync_val_compare_and_swap ด้วยค่าที่ฉันรู้ว่าไม่มีทางเป็นไปได้ นั่นจะช่วยแก้ปัญหาได้หรือไม่? (มีวิธีที่สะอาดกว่านี้ไหม?)