Mengapa std::atomic's store menggunakan XCHG apabila konsistensi berjujukan diminta?
Walaupun operasi kedai konsistensi berjujukan mungkin muncul pada mulanya sebagai sesuatu yang boleh dilaksanakan menggunakan arahan kedai mudah diikuti oleh penghalang ingatan, menggunakan XCHG (dengan kunci tersirat awalan) menawarkan penyelesaian yang lebih optimum.
XCHG dan Ketekalan Berjujukan
Pada seni bina x86 dan x86_64, XCHG menyediakan pertukaran memori dan penghalang memori penuh, memastikan urutan susunan operasi ingatan. Ini menjadikannya cara yang berkesan untuk melaksanakan stor konsistensi berjujukan.
Batasan Arahan Kedai Biasa
Arahan kedai biasa sahaja, seperti MOV, tidak dapat menjamin konsistensi berjujukan . Ia hanya menyediakan semantik keluaran, yang membolehkan ia disusun semula dengan operasi kemudian, termasuk memperoleh beban.
Pertimbangan Prestasi
Sementara kedua-dua MFENCE dan XCHG boleh digunakan untuk melaksanakan kedai konsistensi berjujukan, mereka mempamerkan ciri prestasi yang berbeza pada pelbagai CPU. Pada CPU tertentu, MFENCE boleh menghentikan pelaksanaan arahan jiran yang tidak teratur. Sebaliknya, XCHG mungkin lebih cekap untuk operasi berbenang tunggal atau apabila talian cache panas dalam cache L1.
Amalan Pengkompil dan Kernel
Pelbagai penyusun dan pengendalian sistem lebih suka pendekatan yang berbeza untuk melaksanakan stor konsistensi berjujukan. GCC menggunakan MOV MFENCE secara sejarah, manakala penyusun lain dan kernel Linux menggunakan XCHG.
Nota Tambahan
Adalah penting untuk ambil perhatian bahawa:
Atas ialah kandungan terperinci Mengapa Kedai `std::atomic` Menggunakan XCHG untuk Ketekalan Berjujukan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!