3

在 x86_64 架构上,以下代码是否始终成立:

A=1;B=1;

线程1:存储A=2;商店 B=3;线程2:加载B==3;负载 A==2

有没有 B==3 但 A==1 的可能性?

4

1 回答 1

4

英特尔架构手册第 3A 卷和第 3B 卷的第 8.2.3 章对此主题进行了深入探讨,但是,对于您的情况 ( 8.2.3.7 Stores Are Seen in a Consistent Order by Other Processors),有严格的顺序,这意味着按照编写顺序观察写入,使在仍然具有旧值的情况下无法B读取更新的值。A

SFENCE应该注意的是,在这种情况下,通过使用各种可用的内存隔离指令、、LFENCE& MFENCEvia _mm_sfence_mm_lfence&来提供显式屏障通常是一个好主意_mm_mfence。在 x64 下,您还可以选择__faststorefence(仅限 MSVC)。

于 2013-03-23T05:56:51.677 回答