Rumah >pembangunan bahagian belakang >C++ >Adakah Atom Baca-Ubahsuai-Tulis Operasi Tunggal atau Dua dalam 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
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!