linux系統,編譯器或處理器會對**進行優化,會導致同一cpu/執行緒上執行的**的執行先後順序發生改變,會導致某些前後強依賴關係的**執行時發生oops。
解決辦法:增加記憶體屏障。這個可以確保記憶體屏障前的**先於記憶體屏障後的**執行到(同乙個cpu/執行緒上)。所以核心中對於需要確保時序的**,要加記憶體屏障去確保。
函式:函式名稱
功能smp_mb()
適用於多處理器的記憶體屏障
smp_rmb()
適用於多處理器的讀記憶體屏障
smp_wmb()
適用於多處理器的寫記憶體屏障
Linux記憶體屏障
首先這裡有一篇文章介紹記憶體屏障的,寫的挺好的,可以看看 linux記憶體屏障是用來解決指令亂序的問題。什麼是指令的亂序呢?簡單一點說就是本來 裡面是這麼寫的 instruction a intstuction b 結果在cpu上執行變成了 instruction b instruction a 導...
linux 優化和記憶體屏障
一 設定屏障的原因 我們程式設計時,指令一般不會按照它們在源程式的順序執行。原因是計算機為了提高程式執行的效能,會對它進行優化,這種優化主要有兩種 1.編譯器的優化 為了提高系統的效能,編譯器在不影響邏輯的情況下會調整指令的順序。2.cpu執行的優化 為了提高流水線的效能,cpu的亂序執行可能會讓後...
優化屏障和記憶體屏障
優化屏障和記憶體屏障 優化屏障 編譯器編譯源 時,會將源 進行優化,將源 的指令進行重排序,以適合於cpu的並行執行。然而,核心同步必須避免指令重新排序,優化屏障 optimization barrier 避免編譯器的重排序優化操作,保證編譯程式時在優化屏障之前的指令不會在優化屏障之後執行。linu...