亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

java:在一個變量上使用 volatile VS 每個變量

java:在一個變量上使用 volatile VS 每個變量

拉丁的傳說 2023-05-24 14:50:55
以下問題:volatile Object A;volatile Object B;volatile Object C;Thread1:reads and writes to A-C Thread2:the same as Thread1所以我的問題是:如果我這樣做會更好嗎:Object A;Object B;Object C;volatile boolean memoryBarrier=true;Thread1:Before read of A-C: read memoryBarrierAfter some write of A-C: write memoryBarrier=true;Thread2:the same as Thread1:Before read of A-C: read memoryBarrierAfter some write of A-C: write memoryBarrier=true;只有一個 volatile 變量更好,還是我應該讓我可以在 valatile 上寫/讀的每個變量?這樣可以嗎,如果我每次都在我的第二個解決方案中寫入我的 memoryBarrier?,以觸發寫入 - 讀取 - 在 java 中的關系語義之前發生?我猜它沒有被優化掉?所以總結:我的解決方案 1 和 2 在語義上是否相等?解決方案2更好嗎?我是否可以始終將相同的值寫入 volatile 變量以獲得讀/寫 volatile happensbefore-relationship?
查看完整描述

1 回答

?
aluckdog

TA貢獻1847條經驗 獲得超7個贊

該示例非常簡單,因此您可能看不到性能方面的太大差異。

我的直覺告訴我,在進行 3 次非易失性內存訪問后進行一次volatile訪問可能比volatile連續發出 3 次訪問要好。

這三個volatile內存訪問是完全有序的(A happens-before B happens-before C)并限制編譯器和處理器執行某些優化。非易失性版本在 A、B 和 C 之間建立無先行關系,因此為編譯器和處理器提供更多自由來利用內存級并行/指令級并行。


查看完整回答
反對 回復 2023-05-24
  • 1 回答
  • 0 關注
  • 140 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號