Mengapa kedai std::atomic menggunakan XCHG untuk ketekalan berurutan
Dalam konteks std::atomic untuk seni bina x86 dan x86_64, a operasi kedai dengan konsistensi berurutan (std::memory_order_seq_cst) menggunakan XCHG dan bukannya stor mudah dengan penghalang ingatan sebagai teknik untuk mencapai semantik keluaran berjujukan.
Ketekalan Berjujukan dan xchg
Ketekalan berurutan menentukan bahawa semua operasi memori muncul untuk melaksanakan dalam beberapa urutan berurutan, dan susunan ini adalah sama untuk semua urutan. XCHG, arahan x86 yang menukar nilai dua operan secara atom, sememangnya memenuhi keperluan ketekalan berjujukan ini. Dengan menggunakan XCHG untuk melaksanakan operasi tulis, std::atomic memastikan bahawa kedai menjadi kelihatan secara global kepada semua urutan pada titik tertentu dalam susunan pelaksanaan, menghalang penyusunan semula dengan operasi seterusnya.
mov- kedai mfence lwn. XCHG
Sementara kedai mov ringkas diikuti dengan memori pagar (seperti mfence) secara teorinya boleh memberikan semantik keluaran, ia tidak mencukupi untuk operasi kedai keluaran berjujukan. MFENCE, arahan pagar ingatan yang mewujudkan penghalang ingatan, memastikan bahawa operasi tulis sebelumnya komited kepada ingatan sebelum meneruskan. Walau bagaimanapun, ia tidak menghalang operasi pemuatan berikutnya daripada disusun semula sebelum stor keluaran.
Pertimbangan Prestasi
Pilihan antara mfence kedai mov dan XCHG untuk keluaran berjujukan operasi kedai melibatkan pertukaran prestasi.
Butiran Pelaksanaan
Dalam praktiknya, pelaksanaan khusus std::atomic's store dengan konsistensi berjujukan berbeza-beza bergantung pada pengkompil dan seni bina perkakasan.
Pagar Perolehan Tersirat
Pernyataan bahawa kedai x86 mempunyai pagar perolehan tersirat adalah tidak betul. Kedai di x86 mempunyai semantik keluaran, bukan memperoleh semantik. Semantik perolehan biasanya dikuatkuasakan menggunakan halangan memori seperti mfence atau operasi baca atom dengan semantik std::memory_order_acquire.
Atas ialah kandungan terperinci Mengapakah kedai `std::atomic` menggunakan XCHG untuk konsistensi berjujukan pada x86?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!