我正在用 C 编写一些低级同步代码。我遇到了一个问题:
假设有两个线程Thread A
并Thread B
在 x86_64 机器上运行。Thread A
在时间t1写入内存位置,之后不再对该位置进行写入。Thread B
在时间t2读取相同的内存位置。
Thread A:
foo = magic_value; /* happens at t1 */
Thread B:
bar = foo; /* happens at t2 */
assert(bar == magic_value);
我的问题是:对于t2 - t1 > delta的任何t1和t2是否存在delta。保证读取在t1写入的最新值。Thread B
Thread A
我已经阅读了英特尔和 AMD 的文件,他们没有提到是否存在这样的保证。我知道这个值可能取决于处理器型号甚至主板设计(对于多路机器)。我想在当前可用的任何健全的 x86_64 机器上,这种延迟必须有一些限制。
我知道如何使用锁或内存屏障等同步原语来保证这种行为。我只需要知道是否存在这样的保证延迟,以使内存访问变得全局可见。
非常感谢!!