我刚学习了interlocked类,它被认为比简单锁定更快。这很好,但我对实现感到好奇。
据我所知,确保变量上的操作是原子性的唯一方法是确保在任何时刻只有一个线程可以访问该变量。这就是锁定。
我使用了反射器来获取Interlocked的源代码,但似乎它使用外部方法来完成所有工作:
[MethodImpl(MethodImplOptions.InternalCall), ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
internal static extern int ExchangeAdd(ref int location1, int value);
我进行了一些测试,事实上,使用Interlocked比简单锁定对象并增加它的速度快两倍。
他们是如何做到的?