您好,登錄后才能下訂單哦!
volatile的可見性原理是什么,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
關鍵點1: 總線嗅探器(MESI 緩存一致性原理 )
關鍵點2: 總線鎖、緩存鎖,為了解決并發問題,會在內存區域的值加鎖(內存鎖),是在store 之前會給總線內的值加一個鎖,write 完成后在解鎖(這里大部分是緩存行鎖的,總線鎖看情況)。
關鍵點3:
就是為了使一個CPU上運行的線程能夠讀取到另外一個CPU線程的共享變量更新。這個CPU必須先根據無效化隊列中存儲的消息,刪除相應高速緩存內的數據副本,從而在其他CPU更新共享變量時能通過緩存一致性協議同步到該CPU的高速緩存中。內存屏障中的加載屏障 (Load Barrier)就是用來解決這個問題的。Load Barrier會根據會根據無效化隊列內容的內存地址,將其他CPU上使用了該緩存的高速緩存中對應的數據狀態標記為I,從而使用該CPU后續針對這個的讀操作時必須先發送Read消息,以將其他處理器對相關共享變量所做的更新同步到該處理器的高速緩存中。
當修改了增加volatile 的變量時,會馬上將變量值寫回到主內存中,這時會在store 前對主內存的這個變量加鎖,在store 通過總線的時候觸發MESI緩存一致性協議,通過總線嗅探器將其他cpu工作內存中的此變量置為無效狀態(涉及內存屏障)。當次cpu 完成變量的write 操作時,在對變量進行解鎖。
看完上述內容,你們掌握volatile的可見性原理是什么的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。