volatile關鍵字的使用場景

2021-10-04 19:37:00 字數 1111 閱讀 1416

使用場景:

volatile如果想控制線程併發的話, 需要判斷

volatile 保證了程式的可見性, 但是用之前需要判斷下,如下**跑一下就清晰了,算是乙個低能耗的併發鎖,  volatile能保證 資料被多個執行緒訪問的可見性,但是保證不了原子性, 有點類似樂觀鎖+改後立刻同步到主記憶體.

public class test2 

} static void setflag()

public static void main(string args)

}

當前執行緒是1

當前執行緒是2

當前執行緒是2

當前執行緒是2

當前執行緒是2

當前執行緒是2

當前執行緒是2

當前執行緒是2

當前執行緒是2

當前執行緒是2

當前執行緒是2

當前執行緒是1

當前執行緒是1

當前執行緒是1

當前執行緒是2

當前執行緒是1

當前執行緒是2

當前執行緒是1

當前執行緒是2

當前執行緒是3

當前執行緒是1

當前執行緒是4

當前執行緒是3

當前執行緒是2

當前執行緒是3

當前執行緒是4

當前執行緒是1

當前執行緒是4

當前執行緒是3

當前執行緒是2

當前執行緒是3

當前執行緒是4

當前執行緒是1

當前執行緒是4

當前執行緒是3

當前執行緒是2

當前執行緒是3

當前執行緒是4

當前執行緒是1

當前執行緒是4

當前執行緒是3

當前執行緒是2

當前執行緒是3

當前執行緒是4

當前執行緒是1

當前執行緒是4

當前執行緒是3

當前執行緒是2

當前執行緒是3

當前執行緒是4

當前執行緒是4

shutdown!

當前執行緒是1

當前執行緒是3

當前執行緒是2

為什麼shuddown之後, 還執行執行緒1 3 2

volatile關鍵字的使用

volatile提醒編譯器它後面所定義的變數隨時都有可能改變,因此編譯後的程式每次需要儲存或讀取這個變數的時候,都會直接從變數位址中讀取資料。如果沒有volatile關鍵字,則編譯器可能優化讀取和儲存,可能暫時使用暫存器中的值,如果這個變數由別的程式更新了的話,將出現不一致的現象。下面舉例說明。經常...

volatile關鍵字的使用

msdn手冊中對volatile關鍵字的解釋 大概的翻譯 volatile關鍵字是乙個型別限定符,用於宣告乙個物件可以通過其他語句 例如作業系統 硬體或併發執行的執行緒 在程式中進行修改。volatile關鍵字的兩個功能 1 防止編譯器對彙編指令做順序上的優化。2 防止暫存器儲存變數的副本值。應用在...

關鍵字 volatile關鍵字的作用

1.volatile關鍵字是防止在共享的空間發生讀取的錯誤。只保證其可見性,不保證原子性 使用volatile指每次從記憶體中讀取資料,而不是從編譯器優化後的快取中讀取資料,簡單來講就是防止編譯器優化。2.在單任務環境中,如果在兩次讀取變數之間不改變變數的值,編譯器就會發生優化,會將ram中的值賦值...