【参考】
https://zhuanlan.zhihu.com/p/55917869
【cache memory】
cpu和主存间存在三级缓存
L1, L2(单核独享)
L3(多核共享)
【L1和L2如何保持一致】
mesi协议定义cacheline四个状态
modified,只缓存在该cpu的缓存中,且被修改
exclusive,只缓存在该cpu的缓存中,未被修改
shared,被多个cpu缓存,并且各个缓存中的数据与主存数据一致,当有一个CPU
修改该缓存行中,其它CPU
中该缓存行可以被作废
invalid,该缓存是无效的(可能有其它CPU
修改了该缓存行)
【false share问题】
1)core0抢到cacheline的主导权,thread0更新cacheline(导致core1中cache line 变为invalid)
2)thread1去更新时通知core0将cacheline刷回主存,然后再从主存中load该cacheline进入高速缓存进行修改(该修改又会使得core0的cacheline失效)
【性能测试】
https://www.noerror.net/zh/cpp/thread/hardware_destructive_interference_size.html
只用了1/4的时间
【folly实现】
隔离几个变量
标签:缓存,False,修改,主存,CPU,cacheline,Sharing,共享,cpu From: https://www.cnblogs.com/jiangshifu/p/17025848.html