有什么可以阻止 CPU 在执行其计划的集合操作之前等待很长时间吗?

Is there anything that prevents the CPU from waiting a long time before executing its scheduled set operations?

假设我有两个共享全局变量 x 的线程。 Thread A 的工作是将值设置为 x,而 Thread B 的工作是读取 x。现在每个线程(或者我想是每个核心)都会有一个 x.

的缓存副本

假设 Thread A 已将 x 的值设置为 12345。现在 Thread A 的缓存可以保持不变,因为 CPU 可以安排稍后执行的设置操作,因此缓存一致性协议不会起作用,所以当 Thread B 读取值时x,它将读取旧值。

我的问题是:有没有什么可以阻止 CPU 在执行其计划的集合操作之前等待很长时间(例如:10 分钟)?

注意:我知道我可以使用内存屏障来强制CPU立即执行其预定的集合操作,但我很想知道如果我不使用内存屏障会发生什么。

我在过去 15 年中阅读的 CPU 文档中没有用比 "X is visible before Y" 更具体的术语来谈论同步内存所需的时间。这样做的原因是因为内存协议非常复杂,几乎不可能在您的写入变得可见(DMA、纠错、TLB 查找、SMM 等)之前设置一个上限。

您可以构建一个理论上的场景,在该场景中您的作品将永远不可见,事实上,如果您想这样做,只需找到 CPUs 的勘误表文档,他们将提供大量示例说明如何做到这一点发生。但实际上呢?不,你永远不会等 10 分钟。您 运行 使用的内核将接收中断,这些中断将执行内存读取和写入,刷新存储缓冲区并逐出缓存行。

话虽如此,您仍然应该使用内存同步,但出于不同的原因。用于执行命令。如果值 x 是您想要发送给另一个线程的唯一信息,它最终将变得可读,并且您可以不用同步。但这种情况几乎从未发生过。通常值 x 表示值 y 包含一些有趣的东西,当 x 对其他人可见时,您需要适当的同步才能知道 y 具有正确的内容线程。