C 學習筆記 24

2021-08-08 10:29:25 字數 808 閱讀 2561

volatile關鍵字是一種型別修飾符,用它宣告的型別變數表示可以被某些編譯器未知的因素更改,比如:作業系統、硬體或者其它執行緒等。由於訪問暫存器的速度要快過ram,所以編譯器一般都會作減少訪問外部ram的優化。遇到這個關鍵字宣告的變數,編譯器對訪問該變數的**就不再進行優化,從而可以提供對特殊位址的穩定訪問。

volatile的本意是「易變的」,不過翻譯成「直接訪問原始記憶體位址」更為合適。「易變」是因為外在因素引起的,象多執行緒,中斷等,並不是因為用volatile修飾了的變數就是「易變」了,假如沒有外因,即使用volatile定義,它也不會變化。

一般說來,volatile用在如下的幾個地方:

1)中斷服務程式中修改的供其它程式檢測的變數需要加volatile;

2)多工環境下各任務間共享的標誌應該加volatile;

3)儲存器對映的硬體暫存器通常也要加volatile說明,因為每次對它的讀寫都可能由不同意義。

另外,以上這幾種情況經常還要同時考慮資料的完整性(相互關聯的幾個標誌讀了一半被打斷了重寫),在1中可以通過關中斷來實現,2中可以禁止任務排程,3中則只能依靠硬體的良好設計了。

參考這個鏈結講講c++中的volatile關鍵字

volatile和互斥鎖的區別?

c++11標準中明確指出解決多執行緒的資料競爭問題應該使用原子操作或者互斥鎖。

c和c++中的volatile並不是用來解決多執行緒競爭問題的,而是用來修飾一些因為程式不可控因素導致變化的變數,比如訪問底層硬體裝置的變數,以提醒編譯器不要對該變數的訪問擅自進行優化。

參考這個鏈結多執行緒程式設計中什麼情況下需要加 volatile?

C 學習筆記24 函式模板

1 泛型程式設計的概念 不考慮具體資料型別的程式設計模式 對於swap函式可以考慮下面的泛型寫法 swap t a,t b t t a a b b t swap泛型寫法中的 tt 不是乙個具體的資料型別,而是泛指任意的資料型別。c 中泛型程式設計 函式模板 提供一種特殊的函式可用不同型別進行呼叫 看...

學習進度筆記24

今天完成了老師布置的tensorflow實驗4 實驗目的 1.掌握使用 tensorflow 進行knn 操作2.掌握 knn 演算法的原理 實驗原理 knn的基本原理 knn是通過計算不同特徵值之間的距離進行分類。整體的思路是 如果乙個樣本在特徵空間中的k個最相似 即特徵空間中最鄰近 的樣本中的大...

C語言學習筆記 24鍊錶

一 鍊錶和陣列的比較 二 鍊錶中的術語 三 演算法 四 鍊錶結構示意圖 五 示例 include include include 定義乙個鍊錶結構 struct node 函式宣告 struct node createlist void void ergodiclist struct node in...