首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Interlocked.Increment的性能

Interlocked.Increment的性能
EN

Stack Overflow用户
提问于 2009-06-23 17:46:46
回答 6查看 16.4K关注 0票数 23

在不同的平台上,对于int和long,Interlocked.Increment(ref x)x++快还是慢?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2009-06-23 17:53:44

它速度较慢,因为它强制动作自动发生,并且它充当内存屏障,消除了处理器对指令周围的内存访问进行重新排序的能力。

当你想让动作处于原子状态,并且可以在线程之间共享时,你应该使用Interlocked.Increment --它并不打算完全取代x++。

票数 42
EN

Stack Overflow用户

发布于 2009-08-19 18:06:35

根据我们的经验,InterlockedIncrement()等人在Windows上的影响是相当大的。在一个示例中,我们能够消除互锁,而使用++/--。仅此一项就将运行时间从140秒减少到110秒。我的分析是,互锁强制内存往返(否则其他内核如何看到它?)。L1缓存读/写大约是10个时钟周期,而内存读/写更像是100个时钟周期。

在此示例中,我估计递增/递减操作的数量约为10亿次。因此,在2 2Ghz的CPU上,++/--大约是5秒,互锁大约是50秒。将差异分散到多个线程,时间接近30秒。

票数 17
EN

Stack Overflow用户

发布于 2009-06-23 17:53:30

仔细考虑一下,您就会意识到Increment调用不可能比简单的增量运算符应用程序更快。如果是,那么编译器的增量操作符的实现将在内部调用Increment,并且它们将执行相同的操作。

但是,正如您通过自己测试可以看到的那样,它们的性能并不相同。

这两个选项有不同的用途。通常使用增量运算符。当您需要操作是原子的,并且您确定该变量的所有其他用户也在使用互锁操作时,请使用Increment。(如果他们不是所有人都合作,那么这并没有真正的帮助。)

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1034070

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档