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
Lepaskan: 2024-12-05 02:13:09
asal
495 orang telah melayarinya

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
Salin selepas log masuk
  • 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);
Salin selepas log masuk

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!

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