omi*_*nug 6 .net c# multithreading test-and-set memory-fences
编译器或处理器可以重新排序以下指令,以便另一个线程看到a == 0和b == 1?
假设int a = 0, b = 0;某个地方.
System.Threading.Interlocked.CompareExchange<int>(ref a, 1, 0);
System.Threading.Interlocked.CompareExchange<int>(ref b, 1, 0);
Run Code Online (Sandbox Code Playgroud)
Interlock不会.使用将发出完整的记忆围栏信号."也就是说,任何变量在Interlocked方法调用之前写入方法之前执行Interlocked,并且在调用之后执行调用之后读取任何变量."[1]他们使用易失性读/写方法来阻止b = 1之前的操作a = 1.
[1]:Jeffrey Richter:"通过C#的CLR - 第三版"第V部分,第803页
| 归档时间: |
|
| 查看次数: |
248 次 |
| 最近记录: |