volatile的作用和舉例

2021-07-01 20:33:54 字數 1346 閱讀 7309

1、作用:作為指令關鍵字,確保本條指令不會因為編譯器的優化而省略,要求每次直接讀值。

舉例:int a = 10;

a = 5;

a = 3;

如果不加volatile,編譯器會認為a = 3,所以上面兩條指令不會產生機器**。

2、習題:

1). 乙個引數既可以是const還可以是volatile嗎?解釋為什麼。

2). 乙個指標可以是volatile 嗎?解釋為什麼。

3). 下面的函式被用來計算某個整數的平方,它能實現預期設計目標嗎?如果不能,試回答存在什麼問題:

1

2

3

4

intsquare(volatileint*ptr)

解:1). 是的。乙個例子是唯讀的

狀態暫存器。它是volatile因為它可能被意想不到地改變。它是const因為程式不應該試圖去修改它。

2). 是的。儘管這並不很常見。乙個例子是當乙個中斷服務子程式修改乙個指向乙個buffer的

指標時。

3). 這段**是個惡作劇。這段**的目的是用來返

指標*ptr指向值的平方,但是,由於*ptr指向乙個volatile型引數,

編譯器將產生類似下面的**:

1

2

3

4

5

6

7

intsquare(volatileint*ptr)

由於*ptr的值可能在兩次取值語句之間發生改變,因此a和b可能是不同的。結果,這段**可能返回的不是你所期望的平方值!正確的**如下:

1

2

3

4

5

6

longsquare(volatileint*ptr)

volatile作用及應用舉例

保證執行緒可見性 不能代替synchronized 保證原子性 禁止指令重排序 細節與cpu有關雙重判斷單例 要不要加volatile 需要 一定需要 防止指令重排 synchronized 不能防止重排序 public class singletonclass return instance pr...

volatile的用法和作用

首先volatile修飾的變數,作用在編譯階段,影響編譯出的結果,其修飾的變數是隨時可能被修改的,volatile告訴編譯器,這個變數是重要人物,不要偷懶的去走捷徑,每次認認真真的去從記憶體拿值。舉個簡單的例子 求平方 int square volatile int ptr 假如在你做運算的時候,外...

mysql中外鍵的作用和舉例

1 基本介紹 外來鍵作用 使兩張表形成關聯,外來鍵只能引用外表中的指定列的值!建立外來鍵的前提 本表的列必須與外來鍵型別相同 外來鍵必須是外表的主鍵 指定外來鍵關鍵字 foreign key 列名 引用外來鍵關鍵字 references 外來鍵表名 外來鍵列名 事件觸發限制 on delete和on...