当前位置:  开发笔记 > 编程语言 > 正文

Interlocked是如何工作的,为什么它比锁更快?

如何解决《Interlocked是如何工作的,为什么它比锁更快?》经验,为你挑选了1个好方法。

我刚刚学会了互锁类,它应该比简单锁定更快.现在,这一切都很好,但我对实施感到好奇.

据我所知,确保变量操作是以原子方式完成的唯一方法是确保只有一个线程可以随时访问该变量.哪个是锁定的.

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

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

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

他们是怎么做到的?



1> Reed Copsey..:

Interlocked支持CPU级别,可以直接执行原子操作.

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

推荐阅读
保佑欣疼你的芯疼
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有