<分区>
我刚刚了解到互锁类,它应该比简单的锁定更快。现在,这一切都很好,但我对实现感到好奇。
据我所知,确保对变量的操作以原子方式完成的唯一方法是确保在任何时刻只有一个线程可以访问该变量。这是锁定。
我已经使用反射器来获取 Interlocked 的源代码,但它似乎使用外部方法来完成所有工作:
[MethodImpl(MethodImplOptions.InternalCall), ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
internal static extern int ExchangeAdd(ref int location1, int value);
我已经运行了一些测试,Interlocked 实际上比简单地锁定对象并递增它快两倍。
他们是怎么做到的?