https://www.cnblogs.com/PurpleTide/archive/2010/11/25/1887506.html CLR via C# 讀書筆記 2-3 Cache Lines and False Sharing(高速緩衝區和錯誤共用???)關於CPU中緩存行的問題。 volat ...
https://www.cnblogs.com/PurpleTide/archive/2010/11/25/1887506.html
CLR via C# 讀書筆記 2-3 Cache Lines and False Sharing(高速緩衝區和錯誤共用???)
關於CPU中緩存行的問題。 volatile 修飾的欄位 會 lock 整個緩存行,而 每個緩存行占用64KB ,老的CPU32KB。。
因此class A{ int a ,int b} 如果A.a 被線程1 修改, 線程2 就無法修改以及訪問 A.b ,直到A.a被線程1修改完成 再次寫入記憶體 ,
線程2 才能訪問 記憶體中的A.b ,這就是 記憶體鎖定(跟CPU中L3緩存中的緩存行鎖定是同步的。
因此 一個類最好 set 記憶體佈局,int a 占用64個位元組,int b 偏移64個位元組後存放。這樣就能 a ,b 欄位 各占用一個 L3 緩存行。不同線程讀寫a,b 時無需等待另一個線程讀寫完畢。
https://blog.csdn.net/sprayabc/article/details/8658369
以下是最最最長盡的多核CPU 以及L3緩存的緩存行,設計過程。
https://www.cnblogs.com/jokerjason/p/9584402.html