volatile實現原理

2021-09-27 12:55:14 字數 503 閱讀 6478

首先我們來討論一種情況,現在有兩個執行緒,乙個是讀執行緒,讀取乙個共享資料並列印,乙個是寫執行緒,更新共享資料,這樣乙個情形的原理是什麼樣的?

這樣會出現乙個什麼樣的問題呢?就是乙個寫執行緒將資料讀取到記憶體更新的時候,讀執行緒去讀取這個資料,導致讀寫執行緒的資料不一致。

這個有什麼解決方案呢?

主存中的資料所有執行緒都可以訪問

每個執行緒都有自己的工作記憶體(本地記憶體)

工作空間資料:區域性變數、記憶體的副本

執行緒不能直接修改記憶體中的資料,只能讀到工作空間來修改,修改完成後重新整理到記憶體

volatile關鍵字的語義分析:

volatile作用:讓其他執行緒能夠馬上感知到某一線程對某個變數的修改

保證可見性:對共享變數的修改,其他執行緒馬上能感知到 ,不保證原子性

保證有序性:

volatile的原理和實現原理

volatile實現原理

via yzwall技術筆記 volatile變數寫,彙編指令會多出lock字首,lock字首在多核處理器下的作用 針對編譯器重排序 jmm針對編譯器指定了volatile重排序規則表,規定哪些先後操作不能進行編譯器重排序 針對處理器重排序 編譯器在生成位元組碼指令時,通過在指令序列中插入記憶體屏障...

Java併發 volatile的實現原理

synchronized 是乙個重量級的鎖,volatile通常被比喻成輕量級的synchronized volatile是乙個變數修飾符,只能用來修飾變數。volatile寫 當寫乙個volatile變數時,jmm會把該執行緒對應的本地記憶體中的共享變數重新整理到主記憶體。volatile讀 當讀...

併發程式設計 volatile底層實現原理

解決可見性使用快取一致性。防止指令重排序使用記憶體屏障,保證有序性。有volatile變數修飾的共享變數,編譯時會有lock字首。lock字首指令會引起處理器快取回寫到記憶體。匯流排鎖 快取鎖 乙個處理器的快取回寫到記憶體會導致其他處理器的快取無效。mesi 嗅探 處理器上有一套完整的協議,來保證 ...