B線程工作空間何值的問題
在之前講到可見性時,說,值變更由工作空間->主內存->工作空間 一步不能缺。
但這節(jié)課說,B線程將number更新為6并同步主內存后,A線程的工作空間為何還是5?不是volatile保證了可見性了嗎?
我的理解是,A工作的工作空間已經變成了6,但A線程之前已經讀取過數據了,所以繼續(xù)沿用之前的操作,是5.不知道我的理解是否正確。
在之前講到可見性時,說,值變更由工作空間->主內存->工作空間 一步不能缺。
但這節(jié)課說,B線程將number更新為6并同步主內存后,A線程的工作空間為何還是5?不是volatile保證了可見性了嗎?
我的理解是,A工作的工作空間已經變成了6,但A線程之前已經讀取過數據了,所以繼續(xù)沿用之前的操作,是5.不知道我的理解是否正確。
2017-05-07
舉報
2017-05-14
你根本就不理解。。這個volitate,只對單個操作有效,對i++ 或者其他多步的操作,根本保證不了線程安全
2017-05-10
區(qū)別就是當voliate對象要去操作工作空間的變量時,會先把工作空間的變量清空,去主存讀一下,操作完之后,會先將操作后的數據寫到主存里,這個過程是強制的
2017-05-09
這個主內存->工作空間,是你讀數據的時候,自己去主內存里讀的,不是主內存的數據實時的更新到這個工作空間
2017-05-09
不是你這么理解的,A工作空間的數據還是5,