gpt4 book ai didi

c - 内存写入何时会变得全局可见?

转载 作者:太空宇宙 更新时间:2023-11-03 23:30:16 24 4
gpt4 key购买 nike

我正在用 C 编写一些低级同步代码。我遇到了一个问题:

假设有两个线程 Thread AThread B 在 x86_64 机器上运行。 线程 A 在时间 t1 写入一个内存位置,此后不再写入该位置。 线程 B 在时间 t2 读取相同的内存位置。

Thread A:
foo = magic_value; /* happens at t1 */

Thread B:
bar = foo; /* happens at t2 */
assert(bar == magic_value);

我的问题是:是否存在delta,对于任何 t1t2 t2 - t1 > delta线程 B 保证读取 线程 At1 写入的最新值。

我看过 Intel 和 AMD 的文档,他们没有提到是否存在这样的保证。我知道这个值可能取决于处理器型号甚至主板设计(对于多路机器)。我想在任何当前可用的 x86_64 机器上,这种延迟肯定有一些限制。

我知道如何使用锁或内存屏障等同步原语来保证这种行为。我只需要知道是否存在这样的保证延迟,以便内存访问变得全局可见。

非常感谢!!

最佳答案

我非常确定,无法保证一个 CPU 写入内存位置与另一个 CPU 看到它之间的最长时间。在 NUMA 系统中,一致性协议(protocol)需要很长时间。在实践中它会尽可能快,但我怀疑是否有任何保证。

为什么你需要知道这个?当您编写同步原语时,您只需要考虑排序。 x86_64 强制执行强一致性,这意味着其他 CPU 将按照它们发生的顺序看到存储,而这确实是您唯一需要担心的事情。

关于c - 内存写入何时会变得全局可见?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17337418/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com