volative 與處理器的嗅探技術


在《java並發編程的藝術》這本書中,關於volatile的內存原理本質的描述如下:

有volatile變量修飾共享變量在編譯器編譯后,后多出一個“lock” 來(lock前綴指令相當於一個內存屏障,會強制將對緩存的修改操作寫入主內存),該字符在多核處理器下回引發兩個事件:

  1.將當前處理器緩存行的數據寫回系統內存;

  2.這個寫會內存的操作會使得其他處理器里緩存的該內存地址的數據無效。

在該書籍第三章中的描述如下:

  1.當寫一個volatile變量時,JMM(java共享內存模型)會把該線程對應的本地內存中的共享變量值刷新到主內存;

  2.當讀一個volatile變量時,JMM會把該線程對應的本地內存置為無效,線程接下來從主內存中讀取共享變量。

在第三章中並未深入講述JMM時如何將該線程對應的本地內存置為無效的,在第二章中,也只是一筆帶過有如下描述:

  1.每個處理器通過嗅探在總線上傳播的數據來檢查自己緩存的值是不是過期了,當處理器發現自己緩存行對應的內存地址被修改,就會將當前處理器的緩存行設置為無效狀態, 當處理器對這個數據進行修改操作的時候,會重新從系統內存中吧數據讀到處理器緩存行里。

  2.處理器使用嗅探技術保證它的內部緩存,系統內存和其他處理器的緩存在總線上保持一致。

書中並沒有明確說明,處理器將會在何時觸發“嗅探”這個操作,但我在基於書本做出以下猜測:  

  volatile修飾的共享變量的寫操作會觸發“嗅探”,讓處理器本地緩存中的volatile變量失效;

然而,什么事嗅探技術以及其實現原理,暫時沒有任何的思緒,在網上一翻查找也沒有滿意的答案,或許在以后的學習書籍清單中會給自己解惑(支持處理器的技術)。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM