volatile關鍵字保證了共享變量的可見性,再加上緩存一致性協(xié)議這兩條為何還不能保證原子行?
1 回答

江戶川亂折騰
TA貢獻1851條經驗 獲得超5個贊
請把你的變量當成只有一個格子,變量的值是格子中存放的物件,這個格子能復制當前格子中的物件,返回給獲取這個格子中的物件的訪問者,當訪問者獲取格子的時候,格子會復制物件給訪問者,當訪問者對復制的物件作出改動或者修正后,會將物件重新放回格子,這時候格子會用被放回的物件替代已經有的物件,但是訪問者對于復制的物件做改動是需要時間的,在這段時間內格子中的內容可能會被別的訪問者修改,而當前訪問者修改完物件后再放入格子會將格子中的物件替代掉,這時候就產生了race condition,那么什么叫做共享變量的可見性?其實準確的說就是變量被線程修改的值永遠都會被及時放入內存中而不是cpu的緩存里,當放入內存中我們叫做變量的變化是可見的,緩存一致性這句話難道樓主沒有疑惑嗎?緩存和誰一致呢?答案是緩存和cpu緩存中的變量值是一致的,那cpu緩存中的值是誰放入和操作的呢?當前正在活動的線程。
添加回答
舉報
0/150
提交
取消