假設有兩個變量存儲在同一個CPU緩存行中,如果我成功CAS變量之一,整個緩存行是否會在CAS指令後立即更新?比較和交換後CPU高速緩存行會刷新嗎?
2
A
回答
0
它不需要更新,它已經更新。高速緩存可見性(在正常系統和內存類型上)可確保任何通過正常操作讀取的高速緩存行都具有相同的結果,就像整個內存是平坦的並且一致地更新一樣。另一方面,如果你正在處理部分,WC,流媒體或任何其他不一定一致的訪問,那麼你不能得到這種保證。對於鎖定操作,這通常是通過在高速緩存線上抓取內部鎖來實現的,以便CAS以原子方式執行(讀取 - 修改 - 寫入),但這與緩存一致性是正交的。不管你執行什麼操作(即使是在一個簡單的存儲器上),任何讀取操作都會立即「在...之後」(在同一線程上的程序順序較小,或者在任何其他線程/核心之後按時間順序)立即看到該行在CAS操作之後。當然,來自其他線程的訪問也可能在該操作之前監聽線路並查看舊數據(取決於系統內存排序以及代碼採取的任何預防措施)。
0
是的,它是緩存行中的完整內存障礙。所以如果你已經在同一個緩存行上更新了一些其他變量,然後進行了原子操作,那麼這個值對所有其他進程/線程都是可見的。
話雖這麼說,如果你做的是緩存行的另一個變量的非原子更新,你仍然沒有保證數據將使其相對於其他一些處理器在同一時間寫到同一緩存行上的其他變量。您的保證取決於數據的可見性,即您剛寫入的數據或其他線程寫入的數據。
相關問題
- 1. 高速緩存跨越的作用,同時刷新CPU緩存
- 2. 刷新Proguard的類高速緩存
- 3. 高速緩存行刷新是否將整行寫入內存?
- 4. 關於CPU高速緩存的困惑
- 5. 可編程CPU高速緩存?
- 6. 最後使用的高速緩存行與不同的高速緩存行
- 7. 高級比較和交換(CAS)函數?
- 8. 高速緩存後「採取」行動RDD導致只有2%高速緩存
- 9. 高速緩存刷新後定時的非常高的不確定性
- 10. 高速緩存行大小
- 11. Facebook緩存不會刷新?
- 12. 使用CPU高速緩存行跳動二分搜索
- 13. 數組和高速緩存
- 14. UIImage initWithContentsOfFile:和高速緩存
- 15. Rails行動緩存刷新後過期
- 16. JPA後臺緩存刷新
- 17. CPU緩存是否會加速寫入/讀取新文件?
- 18. 快速排序 - 比較/交換櫃檯
- 19. 編輯和重新顯示內容時強制高速緩存刷新
- 20. 哪些CPU架構支持比較和交換(CAS)?
- 21. 比較和交換庫?
- 22. 鎖vs比較和交換
- 23. 版本庫高速緩存刷新失敗+ pentaho
- 24. 手動刷新直寫式高速緩存
- 25. 在瀏覽器中強制高速緩存刷新
- 26. 尤里卡服務器高速緩存刷新
- 27. 在Java中實現定期刷新高速緩存
- 28. 校驗memcache比文件系統高速緩存更快嗎?
- 29. 多線程映射寫入原始數組後,刷新高速緩存
- 30. 如何在x86 Windows中執行CPU緩存刷新?