Memory 内隐记忆障碍
假设我有两个线程(T1、T2)共享的变量A、B和C。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
//~~
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不在同一缓存线上,也是如此。内存围栏不是特定于变量的;它导致调用线程完成围栏之前发出的所有加载和存储 我可能错了,但我怀疑T2发行的围栏没有用——T1发行了商店;T2发布的围栏将完成T2发布到该点的所有装载/存储。这不会导致T1发布的门店的可见性