9

我刚刚了解到联锁类,它应该比简单的锁定更快。现在,这一切都很好,但我对实施感到好奇。

据我所知,确保对变量的操作以原子方式完成的唯一方法是确保在任何时候只有一个线程可以访问该变量。这是锁定。

我已经使用反射器来获取 Interlocked 的来源,但它似乎使用外部方法来完成所有工作:

[MethodImpl(MethodImplOptions.InternalCall), ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
internal static extern int ExchangeAdd(ref int location1, int value);

我已经运行了一些测试,实际上 Interlocked 的速度是简单地锁定对象并增加它的两倍。

他们是怎么做到的?

4

1 回答 1

11

Interlocked 在 CPU 层面有支持,可以直接做原子操作。

例如,Interlocked.Increment实际上是一个,并且通过指令XADD支持比较和交换(即: ) (都带有前缀)。Interlocked.CompareExchangeCMPXCHGLOCK

于 2013-09-05T15:29:19.127 回答