假设我有两个线程(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 变量),即使这些变量与Foo和Bar不在同一缓存行上?