2014-09-11 74 views

回答

0

它不需要更新,它已經更新。高速緩存可見性(在正常系統和內存類型上)可確保任何通過正常操作讀取的高速緩存行都具有相同的結果,就像整個內存是平坦的並且一致地更新一樣。另一方面,如果你正在處理部分,WC,流媒體或任何其他不一定一致的訪問,那麼你不能得到這種保證。對於鎖定操作,這通常是通過在高速緩存線上抓取內部鎖來實現的,以便CAS以原子方式執行(讀取 - 修改 - 寫入),但這與緩存一致性是正交的。不管你執行什麼操作(即使是在一個簡單的存儲器上),任何讀取操作都會立即「在...之後」(在同一線程上的程序順序較小,或者在任何其他線程/核心之後按時間順序)立即看到該行在CAS操作之後。當然,來自其他線程的訪問也可能在該操作之前監聽線路並查看舊數據(取決於系統內存排序以及代碼採取的任何預防措施)。

0

是的,它是緩存行中的完整內存障礙。所以如果你已經在同一個緩存行上更新了一些其他變量,然後進行了原子操作,那麼這個值對所有其他進程/線程都是可見的。


話雖這麼說,如果你做的是緩存行的另一個變量的非原子更新,你仍然沒有保證數據將使其相對於其他一些處理器在同一時間寫到同一緩存行上的其他變量。您的保證取決於數據的可見性,即您剛寫入的數據或其他線程寫入的數據。