【发布时间】:2021-11-30 04:30:36
【问题描述】:
在像 C 这样的语言中,从不同线程对同一内存位置的非同步读取和写入是未定义的行为。但是在 CPU 中,cache coherence says 表示,如果一个内核写入一个内存位置,然后另一个内核读取它,那么另一个内核必须读取写入的值。
如果上一层只是将其丢弃,为什么处理器需要费心暴露内存层次结构的连贯抽象?为什么不让缓存变得不连贯,并要求软件在要共享某些内容时发出特殊指令?
【问题讨论】:
-
内存屏障和缓存一致性是不同的东西
-
if the next layer up嗯,C 不一定是“下一层”,C 中未定义的行为 only 意味着没有要求 C 标准要求的程序的行为 - 可能有其他标准的要求,特定的 C 程序可能取决于特定的硬件和编译器行为。 -
softwareengineering.stackexchange.com 可能更适合这个 Q。
-
假设 CPU A 设置缓存行的字节 0 和 CPU B 或多或少同时设置字节 15。如果没有缓存一致性,就无法解决这个问题。做两次操作总会有一场比赛。
-
@stark 说得好,语言确实说你可以在不干扰相邻内存位置的情况下以大于字节的任何粒度进行写入
标签: c cpu cpu-architecture cpu-cache