![](/img/trans.png)
[英]atomic exchange with memory_order_acquire and memory_order_release
[英]How does CPU provides what memory_order_acquire guarantees?
我一直在研究C ++ 11中的內存順序語義,並且在理解memory_order_acquire如何在CPU級別工作方面有些困難。
根據cppreference;
帶有此內存順序的加載操作在受影響的內存位置上執行獲取操作:在此加載之前,無法對當前線程中的任何讀取或寫入進行重新排序。 其他線程中釋放相同原子變量的所有寫操作在當前線程中都是可見的(請參閱下面的Release-Acquire順序)
我真正無法理解的部分是;
在此加載之前,無法重新排序當前線程中的讀取或寫入。
如果CPU在到達“ memory_order_acquire”部分之前已經對命令進行了重新排序,會發生什么情況? CPU是否還原所有已完成的工作? 如何保證這一點?
謝謝。
CPU不會“到達” memory_order_acquire
部分。 這些是針對編譯器的指令。 編譯器必須使用其對CPU內存模型的知識來進行翻譯。
例如,如果一個CPU最多只能對2條指令進行重新排序,那么插入2條NOP指令將是實現語義部分的一種相當簡單的方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.