Memory 内隐记忆障碍

Memory 内隐记忆障碍,memory,model,lock-free,Memory,Model,Lock Free,假设我有两个线程(T1、T2)共享的变量A、B和C。 我有以下代码: //T1 //~~ A = 1; B = 1; C = 1; InterlockedExchange(ref Foo, 1); //T2 (executes AFTER T1 calls InterlockedExchange) //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ InterlockedExchange(ref Bar, 1); WriteLin

假设我有两个线程(T1、T2)共享的变量A、B和C。
我有以下代码:

//T1  
//~~

A = 1;  
B = 1;  
C = 1;

InterlockedExchange(ref Foo, 1);

//T2  (executes AFTER T1 calls InterlockedExchange)  
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

InterlockedExchange(ref Bar, 1);

WriteLine(A);  
WriteLine(B);  
WriteLine(C);  
问题:

在T1和T2上调用InterlockedExchange(隐式完全隔离)是否意味着T2将“看到”T1在隔离之前完成的写操作?(A、B和C变量),即使这些变量与FooBar不在同一缓存线上,也是如此。内存围栏不是特定于变量的;它导致调用线程完成围栏之前发出的所有加载和存储

我可能错了,但我怀疑T2发行的围栏没有用——T1发行了商店;T2发布的围栏将完成T2发布到该点的所有装载/存储。这不会导致T1发布的门店的可见性