Rumah >pembangunan bahagian belakang >C++ >Adakah Operasi Tunggal Baca-Ubah Suai-Tulis C Atomic dengan Semantik Pemerolehan-Pelepasan, atau Urutan Pemuatan dan Simpanan?

Adakah Operasi Tunggal Baca-Ubah Suai-Tulis C Atomic dengan Semantik Pemerolehan-Pelepasan, atau Urutan Pemuatan dan Simpanan?

Barbara Streisand
Barbara Streisandasal
2024-12-07 19:22:13312semak imbas

Are C   Atomic Read-Modify-Write Operations Single Operations with Acquire-Release Semantics, or a Sequence of Loads and Stores?

Pemesanan Memori dengan Operasi Baca-Ubah-Tulis-Tulis Atom

Dalam C , operasi baca-ubah-tulis (RMW) atom seperti x .exchange() menguatkuasakan jaminan pesanan khusus berkenaan dengan muatan dan stor lain. Timbul persoalan sama ada operasi ini dipertimbangkan:

  1. Satu operasi dengan semantik pelepasan-perolehan
  2. Beban perolehan diikuti oleh stor keluaran dengan jaminan tambahan

Perspektif Standard

Mengikut standard C, RMW operasi dianggap sebagai operasi tunggal. Ini tersirat oleh nama tunggal mereka dan perkataan yang berkaitan.

Pelaksanaan ARM64

Dalam ARM64, operasi RMW dilaksanakan sebagai urutan beban, pertukaran atom dan arahan stor . Walaupun secara teori pelaksanaan ini membenarkan arahan stor menjadi kelihatan sebelum pertukaran atom, ini tidak menjejaskan jaminan pesanan memori standard.

Penyegerakan Memori

Penyegerakan memori dalam C adalah berdasarkan terutamanya pada hubungan penyegerakan-dengan antara operasi pelepasan dan perolehan. Dalam contoh kod yang disediakan:

  • x.exchange(1, std::memory_order_acq_rel): Pemerolehan hubungan penyegerakan-dengan tidak penting kerana tiada kedai berikutnya untuk x.
  • x.load(std::memory_order_acquire): Beban pada x tidak disegerakkan dengan apa-apa sahaja, menjadikannya santai dengan berkesan.

Analisis Penyegerakan

Oleh kerana tiada operasi lain untuk disegerakkan, urutan berikut berlaku:

  1. Simpan ke y
  2. Muatkan pada y (santai)
  3. Muatkan pada x (santai)

Kemungkinan Output

Oleh itu, kod sememangnya boleh mengeluarkan 0, 1. perspektif standard membayangkan bahawa operasi RMW adalah operasi tunggal tanpa jaminan tambahan, membenarkan ini keluaran.

Atas ialah kandungan terperinci Adakah Operasi Tunggal Baca-Ubah Suai-Tulis C Atomic dengan Semantik Pemerolehan-Pelepasan, atau Urutan Pemuatan dan Simpanan?. 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