Saya memiliki variabel di memori bersama x pada sistem multi-prosesor.
void MyFunction(volatile int* x) {
if (*x != 0) {
// do something
}
}
Proses lain (mungkin pada prosesor berbeda) akan menulis ke x menggunakan operasi atom bawaan gcc seperti __sync_bool_compare_and_swap dll.
Saya rasa saya mengalami beberapa masalah konkurensi cache yang terkadang memerlukan sedikit waktu sebelum x akhirnya diperbarui dengan nilai baru.
Yang saya inginkan adalah semacam atom_bandingkan (tanpa pertukaran), jika hal seperti itu ada? Atau "pembacaan atom". Apa cara tercepat untuk melakukan ini? (menghindari mutex, kunci, dll.)
Terima kasih
Sunting:
Saya baru menyadari bahwa solusi yang agak hackish adalah dengan menggunakan __sync_val_compare_and_swap dengan nilai yang saya tahu tidak akan pernah bisa terjadi. Apakah hal itu akan menyelesaikan masalah? (Apakah ada cara yang lebih bersih?)