Dalam konteks penyusunan memori, kelakuan atom baca-ubah suai-tulis (RMW) operasi, seperti x.exchange(...) dengan std::memory_order_acq_rel, menimbulkan soalan: Adakah operasi ini dianggap sebagai entiti tunggal dengan semantik keluaran perolehan atau sebagai urutan operasi yang terdiri daripada beban perolehan diikuti oleh stor keluaran?
Perspektif Standard: Operasi Tunggal
Mengikut kepada standard C, operasi RMW dianggap sebagai operasi tunggal. Implikasi ini timbul daripada namanya, yang menggunakan bentuk tunggal, dan perkataan berkaitan standard. Oleh itu, dalam konteks ini, operasi x.exchange(...) dilihat sebagai satu entiti.
Implikasi Pesanan: Penyusunan Semula Berpotensi
Jika kita mempertimbangkan perspektif standard, kod yang disediakan mempunyai potensi untuk mengeluarkan 0, 1. Kemungkinan ini timbul kerana standard tidak ditakrifkan dari segi penyusunan semula operasi tetapi sebaliknya dari segi perhubungan penyegerakan antara operasi keluaran dan perolehan.
Secara khusus, operasi y.load(acquire) tidak mempunyai stor keluaran-atau-lebih kukuh yang sepadan. Oleh itu, ia tidak menyegerakkan dengan mana-mana operasi lain dan dianggap berkesan sebagai beban santai (y.load(santai)).
Selain itu, komponen "perolehan" operasi x.exchange(1, acq_rel) tidak tidak mempunyai sebarang kedai untuk disegerakkan, menjadikan semantik perolehannya santai dengan berkesan. Ini secara berkesan mengubahnya menjadi operasi x.store(1, release).
Memandangkan tiada operasi sebelum stor dan selepas beban pada x dalam urutan masing-masing, kemungkinan penyegerakan antara operasi ini menjadi berlebihan. Akibatnya, kedua-dua beban boleh kembali sama ada 0 atau 1, membenarkan output 0, 1.
Kesimpulan
Dari perspektif piawaian C, bacaan atom- operasi ubah suai-tulis dianggap sebagai operasi tunggal. Pemahaman ini membayangkan bahawa, dalam contoh yang disediakan, kod tersebut berpotensi untuk mencetak 0, 1 kerana kekurangan penyegerakan antara beban dan stor.
Atas ialah kandungan terperinci Adakah Atom Baca-Ubah Suai-Tulis Operasi Tunggal atau Urutan Operasi Pemerolehan-Pelepas?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!