Rumah > pembangunan bahagian belakang > C++ > Adakah Atom Baca-Ubah Suai-Tulis Operasi Tunggal atau Urutan Operasi Pemerolehan-Pelepas?

Adakah Atom Baca-Ubah Suai-Tulis Operasi Tunggal atau Urutan Operasi Pemerolehan-Pelepas?

Mary-Kate Olsen
Lepaskan: 2024-12-01 14:06:13
asal
794 orang telah melayarinya

Is an Atomic Read-Modify-Write a Singular Operation or a Sequence of Acquire-Release Operations?

Membezakan antara Operasi Tunggal dan Berasingan dalam Baca-Ubah-Tulis-Tulis Atom

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan