Rumah >pembangunan bahagian belakang >C++ >Adakah Atom Baca-Ubahsuai-Tulis Operasi Tunggal atau Dua dalam C?

Adakah Atom Baca-Ubahsuai-Tulis Operasi Tunggal atau Dua dalam C?

Patricia Arquette
Patricia Arquetteasal
2024-12-05 02:13:09496semak imbas

Is Atomic Read-Modify-Write a Single Operation or Two in C  ?

Baca-Ubahsuai-Tulis Atom: Satu Operasi atau Dua?

Untuk tujuan penyegerakan, baca-ubah-tulis atom (RMW) operasi seperti x.exchange(..., std::memory_order_acq_rel) menimbulkan persoalan mengenai rawatan mereka. Adakah ia dianggap sebagai satu operasi atau dua operasi berasingan?

Perspektif Standard

Piawaian C menganggap operasi RMW sebagai entiti tunggal. Ini terbukti daripada penamaan mereka dan tersirat dalam pelbagai bahasa yang berkaitan.

Implikasi Penyegerakan

Dalam contoh anda:

x.exchange(1, std::memory_order_acq_rel); // Line A
y.store(1, std::memory_order_relaxed); // Line B
  • Baris B tidak mempunyai keluaran yang sepadan atau stor yang lebih kukuh, menjadikannya y.store(1, std::memory_order_relaxed).
  • Barisan A hanya mempunyai beban yang sepadan, menjadikan bahagian "perolehan"nya berlebihan. Ia boleh dilihat sebagai x.store(1, std::memory_order_release).

Oleh itu, kod dikurangkan kepada:

x.store(1, std::memory_order_release);
y.store(1, std::memory_order_relaxed);

Memandangkan tiada operasi antara ini menyimpan dan beban yang sepadan dalam urutan lain, penyegerakan dilumpuhkan dengan berkesan. Ini membolehkan kemungkinan mencetak 0, 1.

Implementasi dan Implikasi ARM64

Pelaksanaan x.exchange() ARM64 menimbulkan kebimbangan. Walau bagaimanapun, apabila diteliti lebih dekat, adalah jelas bahawa pelaksanaannya sejajar dengan perspektif standard mengenai operasi RMW tunggal. Urutan pesanan menjamin bahawa nilai bacaan terakhir dalam RMW adalah konsisten dengan penulisan.

Petikan cppreference salah

Teks yang dipetik daripada cppreference adalah tidak tepat. Operasi RMW dalam C dianggap sebagai operasi tunggal dan penyusunan semula operasi lain sebelum atau selepas operasi adalah dilarang.

Atas ialah kandungan terperinci Adakah Atom Baca-Ubahsuai-Tulis Operasi Tunggal atau Dua dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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