Bu https://www.cl.cam.ac.uk/~pes20/cpp/cpp0xmappings.html, sayılı belgeye göre, piyasaya sürülen bir depo MOV (belleğe) olarak uygulanmaktadır. onun http://en.cppreference.com/w/cpp/atomic/memory_orderMOV x86 komutu C++ 11 memory_order_release atomik deposunu uyguluyor mu?
memory_order_release göre
:
bu hafıza düzenine sahip bir kaydetme işlemi salma işlemi gerçekleştirir: bir hafıza Bu depo edilmesinden sonra yeniden sıralanmış olabilir mevcut iplik erişir. Bu, geçerli parçacığındaki tüm yazımların, diğer atomlarda atomik değişkenini veya atomik değişkeni aynı atomik tüketen atomik değişkeni görünür hale getiren diğer atomik değişkenler olarak görünür olmasını sağlar.
Ben memory_order_release kullanıldığında, daha önce yapılan tüm bellek saklar bu daha önce bitirmek gerektiğini anlıyoruz.
int a;
a = 10;
std::atomic<int> b;
b.store(50, std::memory_order_release); // i can be sure that 'a' is already 10, so processor can't reorder the stores to 'a' and 'b'
SORU: nasıl sadece MOV komutu bu davranış için yeterli olması mümkün mü? MOV, işlemciye önceki tüm mağazaları bitirmesini nasıl söyler?
en azından gördüğüm Intel derleyicisi ile derlenen kod, haritalama gibi görünmektedir
"x86" üzerinde – Cubbi
@ cubbi: un, önemli, – Krab
bitti: Dinamik bir programlanmış ISA olduğundan, çip her zaman en kötü durumda olduğunu varsayar. – user3528438