0

据我所知,缓存一致性由以下 3 个要求定义:

  1. 从核心 C 上的地址 X 读取 R,如果在 W 和 R 之间没有其他核心写入 X,则返回最近一次写入 W 写入 C 上的 X 的值。

  2. 如果核心 C1 写入 X 并且核心 C2在足够的时间后读取,并且两者之间没有其他写入,则 C2 的读取返回 C1 写入的值。

  3. 对同一位置的写入是序列化的:必须看到对 X 的任何两次写入在所有内核上都以相同的顺序发生。

据我了解这些规则,它们基本上要求所有线程在某个合理的时间内以相同的顺序查看其他线程所做的更新,但似乎没有要求在任何时间点查看相同的数据。例如,假设线程 A 向共享内存位置 X 写入一个值,然后线程 B 向 X 写入另一个值。从 X 读取的线程 C 和 D 必须看到相同的更新顺序:A,B。假设线程 C 已经看到更新 A 和 B,而线程 D 只观察到 A(事件 B 尚未看到)。假设写入 X 和读取 X 之间的时间间隔足够小(小于我们认为的足够时间),这种情况不会违反任何一致性规则,不是吗?

另一方面,一致性协议(例如 MSI)使用写入无效来保证所有内核都具有共享变量的最新值。Wiki说:“目的是两个客户端决不能看到相同共享数据的不同值”。如果我写的关于连贯性规则的内容是真的,我不明白这一点从何而来。我的意思是,我意识到它很有用,但看不到它是在哪里定义的。

4

0 回答 0