深入理解volatile關鍵字

1.volatile與可見性

  • A線程將共享變量讀進工作內存中,同時B線程也將共享變量讀進工作內存中。
  • 在A線程對共享變量修改後,會立即刷新到主內存,此時B線程的工作內存中的共享變量就會被設置無效,需要從主內存中重新讀取新值。反映到硬件上就是CPU的Cache line 置爲無效狀態。

2.volatile與有序性

被volatile修飾的變量在底層會加一個“lock:”的前綴,帶"lock"前綴的指令相當於一個內存屏障,這恰恰是保證可見性與有序性的關鍵,該屏障的作用主要有一下幾點:

  • 指令重排時,屏障前的代碼不能重排到屏障後,屏障後的也不能重排到屏障前。
  • 執行到內存屏障時,確保前面的代碼都已經執行完畢,且執行結果是對屏障後的代碼可見的。
  • 強制將工作內存中的變量刷新到主內存。
  • 其它線程的工作內存的變量會設置無效,需要重現從主內存中讀取
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章