首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C 語言關鍵字深度解析:volatile —— 「專一王子」防編譯器過度優化

     編輯:關於C語言

volatile 是什麼?

volatile 意為「易揮發、易變」。修飾的變量告訴編譯器:每次訪問必須從內存/寄存器實際讀取,不要優化掉。

為什麼需要它?

編譯器為提速會「偷懶」:

int a = 10;
int b = a;  // 讀取 a
int c = a;  // 編譯器可能直接用 10,不再讀內存

單線程下無害,但多線程、硬件寄存器、信號處理中,變量可能被外部修改,編譯器的緩存值就失效了。

典型應用場景

  • 多線程共享變量:一線程寫,一線程讀,無鎖時需 volatile 保證可見性(注意:不保證原子性)。
  • 硬件寄存器:如網卡狀態寄存器,值由外部電平決定,隨時變化。
  • 信號處理函數:volatile sig_atomic_t flag; 在信號處理器中修改,主循環讀取。

比喻:生日禮物

禮物打包好放自己房間(單線程),明天不拆封也知道裡面是啥。但若放在別人那裡(多線程/硬件),不敢保證沒被動過,每次都得拆開看(volatile 強制讀取)。

注意事項

  • volatile 不提供線程同步,不保證原子操作,複雜場景仍需鎖/原子操作。
  • 嵌入式開發中極常見,寫驅動必須掌握。

作者 mr_raptor 的專欄

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved