根據這個https://www.cl.cam.ac.uk/~pes20/cpp/cpp0xmappings.html, 發佈的商店被實現爲MOV(進入內存)。MOV x86指令是否實現了C++ 11 memory_order_release原子存儲?
據他http://en.cppreference.com/w/cpp/atomic/memory_order
memory_order_release:
這種記憶順序的存儲操作執行釋放 操作:在當前線程沒有內存存取這個店後重新排序 。這確保當前線程 中的所有寫入在其他獲取線程或相同原子變量 中可見,並且寫入的消息具有相同原子的其他線程中可見的原子變量的依賴關係成爲 。
我明白,當使用memory_order_release,以前做的所有存儲器存儲應該這樣一個之前完成。
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'
問題:怎麼可能只有MOV指令就足夠了這種行爲? MOV如何告訴處理器完成以前的所有商店?
你忘了提及「在x86上」 – Cubbi
@cubbi:對,很重要,完成 – Krab
因爲它是一個動態調度的ISA,所以芯片總是假定最壞的情況。 – user3528438