volatile的應用

       在併發編程中,volatile和synchronized都扮演着重要的角色,volatile是輕量級的synchronized,它在多處理器開發中保證了共享變量的「可見性」。可見性的意思是當一個線程修改一個共享變量的時,另外一個線程能讀取到這個修改的值。java

       Java編程語言容許線程訪問共享變量,爲了確保共享變量能被準確和一致性的更新,線程應該經過排它鎖得到這個變量。若是一個字段被聲明爲volatile,java線程內存模型確保全部線程看到這個變量值是一致的。 編程

       在volatile變量修飾符的共享變量進行寫操做的時候會多出,一些彙編代碼,lock ...等,lock前綴的指令在多核處理器下會引起兩件事:緩存

     1.回寫內存。將當前處理器緩存行的數據寫回到系統內存。併發

     2.緩存失效。這個寫回內存的操做會使在其餘CPU裏緩存了該內存地址的數據無效。編程語言

       在多處理器下,爲了保證各個處理器的緩存是一致的,就會實現緩存一致性協議,每一個處理器經過嗅探在總線上傳播的數據來檢查本身緩存的值是否是過時了,當處理器發現本身緩存行對應的內存地址被修改,就會將當前處理器的緩存行設置爲無效。線程

volatile的兩條實現規則:內存

1.Lock前綴指令會引發處理器緩存回寫到內存。開發

2.一個處理器的緩存回寫到內存會致使其餘處理器的緩存無效。變量

相關文章
相關標籤/搜索