我終於也碰到volatile這個問題了

2021-06-05 19:35:15 字數 830 閱讀 3811

以前上arm課,老師講到volatile這個關鍵字時,主要是說他用到更硬體相關的地方。比如我們看到很多關於硬體的標頭檔案的時候,暫存器的定義都是幾乎都是volatile與記憶體位址相結合,因為我們時刻想要的是暫存器的最新值,而volatile這個關鍵字的作用就是告訴編譯器不要對它宣告的變數進行優化,每次讀取操作都要獲得它的最新值。

以上就是我在遇到volatile新的問題之前對於volatile的理解,認為它一般就是用在與硬體相關的地方,其他需要用到的地方不知道在**。直到我昨天遇到了關於volatile的新問題。

我遇到的問題是這樣的,我用到了定時器來實現精確的延時,為了判斷時間到而繼續進行執行下面的語句,我宣告了乙個全域性變數來表明定時時間是否到,中斷函式裡我就將這個標誌置位,表示時間到達。在用到定時器的函式裡,我就用while(!flag);這樣的語句來判斷定時時間是否到,但我執行除錯程式時,程式執行了中斷,但是程式就一直停止在while(!flag);這裡不往下執行了。想了好久,我也不知道為什麼。最後可能是靈感還是什麼的,我無意在全域性變數flag前面加了個volatile關鍵字,奇蹟發生了,程式終於順利執行起來了。看來,volatile還在其他的地方有用處。最後,我在網上搜了關於***tile的用法,其中果然就有我面臨到的問題。

現在簡單總結一下volatile的用法。

它主要用到變數會非同步改變的時候,主要表現在一下3個方面:

1.cpu外設暫存器 (我開始一直理解的volatile用法)

2.中斷和主迴圈都會用到的全域性變數 (這就是我遇到的問題啦)

3. 作業系統中的執行緒間都會用到的公共變數 (暫時沒有遇到,不過記下了)

我來做這個「傻子」問題

在論壇上看到這個 傻子帶來的問題 100個人排隊乘坐有100個座位的飛機,正常情況時每個都都會對號入坐,但是,第乙個上飛機的是個傻子,他隨機坐了乙個位子,接下來的人上飛機時,如果自己座位被人坐了就會隨機找個座位坐下,否則就坐自己坐位。問題 最後乙個上飛機的人坐到自己座位的概率是多少?這題蘊含著乙個前...

我碰到Cookie的乙個問題

csdn的使用者反饋回來乙個很詭異的bug,當使用者系統的時間不正確的時候,比正確時間快或者慢時,使用者就登入不上去,很詭異。解決這個問題花了我不少時間。導致這個問題的原因如下 使用 httpcontext.current.response.cookies.set 更新乙個cookie後,會導致 h...

我終於可以回答當初提出的問題了

2016.4.22.friday 昨天裝了ubuntu 16.04 沒想到今天又是神奇的一天。作業系統下課後和馬淑婧走在路上的時候說道她看的文章。她說,明明是很平常的語言寫出來的,她卻能體會到字裡行間的悲傷。前些天看楊絳先生寫的 咱們仨 看到不能自已。然後我想到了歸有光先生的 項脊軒志 我問她,你高...