內存屏障(memory barrier)


一、為什么需要內存屏障

內存屏障的引入,本質上是由於CPU重排序指令引起的。重排序問題無時無刻不在發生,主要源自以下幾種場景:

  1. 編譯器編譯時的優化;
  2. 處理器執行時的多發射和亂序優化;
  3. 讀取和存儲指令的優化;
  4. 緩存同步順序(導致可見性問題)

 

二、內存屏障的分類

barrier()就是compiler提供的屏障,作用是告訴compiler內存中的值已經改變,之前對內存的緩存(緩存到寄存器)都需要拋棄,barrier()之后的內存操作需要重新從內存load,而不能使用之前寄存器緩存的值。並且可以防止compiler優化barrier()前后的內存訪問順序。barrier()就像是代碼中的一道不可逾越的屏障,barrier前的 load/store 操作不能跑到barrier后面;同樣,barrier后面的 load/store 操作不能在barrier之前。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM