【发布时间】:2020-11-21 04:19:22
【问题描述】:
我试图了解 c# 中的易失性读/写和互锁操作如何影响处理器缓存。
-
我在某些地方读到这两个操作都会刷新处理器缓存。我想知道是不是真的?
-
如果他们刷新缓存,他们是怎么做的。例如,使用了哪些汇编指令?
-
如果他们刷新缓存,是否会刷新正在执行的 cpu 的整个缓存?还是只是缓存行?
-
如果他们刷新缓存,它将如何影响其他处理器的缓存?它们是否使其他 cpu 缓存无效,因此在其他处理器中执行的代码通过非易失性读取获得更新的值?
我在网上找不到太多关于此的信息。我对汇编语言非常擅长,所以我自己无法弄清楚。对此有任何想法。
【问题讨论】:
-
1.这是错误的。他们刷新存储缓冲区到缓存。缓存是连贯的,不需要为其他内核刷新以查看您的存储。 software.rajivprab.com/2018/04/29/… 相当不错。 (Microsoft 的“Interlocked*”函数只是带有
lock前缀的指令的 AFAIK(在 x86 上)包装器,因此您读到的关于它们的所有内容都适用,并阻止编译时围绕操作重新排序,即使它是内联的。)
标签: c# clr atomic cpu-architecture coreclr