記憶體屏障的出現:
為了保證記憶體可以被正确地,有序地使用而出現的一個機制。
由于一段代碼在編譯時可能會出現記憶體的使用順序與預期不相同的情況,是以需要這樣一個機制來保證記憶體的使用順序或方法來符合程式員的預期。
導緻出現這樣問題的可能性有兩種:
1:編譯器編譯時的優化,導緻記憶體使用順序不正确,
2:軟體多線程,或作業系統多CPU,導緻記憶體使用順序不正确。
分為兩部分:
1:系統屏障
2:軟體屏障
如何應對:
在代碼中,做記憶體保護。
增加編譯器指令,讓編譯器支援記憶體屏障功能。
單CPU不考慮代碼優化的情況下,幾乎是不用考慮記憶體屏障相關問題的。
多CPU的情況下則不同,如果CPU中代碼執行順序不正确,則可能出現記憶體操作相關的問題。
這時可以用 mfence 系列特殊指令來實作記憶體屏障功能。
對于Linux的多處理器版本,系統内置了一套 mb() 和 smp_mb() 系列記憶體屏障函數。