首页 新闻 会员 周边

C# Thread.SpinWait(int x);这个方法做什么用的?

0
[已解决问题] 解决于 2013-01-28 14:27

C# Thread.SpinWait(int x);这个方法做什么用的?

主要用在什么情况下,请给个例子说明..表复制微软的,谢谢.

hexllo的主页 hexllo | 菜鸟二级 | 园豆:318
提问于:2012-09-05 10:19
< >
分享
最佳答案
2

SpinWait是更轻量级的同步类型,如果等待时间较短,使用该类型可以避免上下文切换和内核切换带来的高开销。

它可以用来替换你需要使用Sleep,WaitHandle的任何地方,但并不一定总是最优的。通常我们用在无锁数据结构中。

奖励园豆:5
Launcher | 高人七级 |园豆:45045 | 2012-09-05 12:02

如果是等待1000毫秒,那么还是用Sleep(1000);是吗?如果用SpinWait(1000)就比较浪费了?

hexllo | 园豆:318 (菜鸟二级) | 2013-01-28 14:49

@hexllo: 对。重要的是,你得先判断你为啥要等待1000毫秒,是否可以通过 Timer 来实现你的逻辑。

Launcher | 园豆:45045 (高人七级) | 2013-01-28 14:53
其他回答(2)
0

http://q.cnblogs.com/q/2211/

chenping2008 | 园豆:9836 (大侠五级) | 2012-09-05 11:11
0

目前的最佳答案大体上是说明白了,但是补充回复有点问题,根据MSDN上的文档

此 SpinWait 方法对于实现锁定很有用。 .NET Framework 中的类(如 Monitor 和 ReaderWriterLock )在内部使用此方法。 SpinWait 实质上,使用参数指定的循环计数,将处理器置于极紧的循环中 iterations 。 因此,等待时间取决于处理器的速度。

其要求的参数不是指等待多少毫秒, 而是指内部循环多少圈,比如Thread.SpinWait(1000)对于现代计算机而言将很快结束, 而不是在1000毫秒后结束。

推测内部实际使用的是System.Threading.SpinWait结构体内的SpinOnce()方法。

eehow | 园豆:197 (初学一级) | 2020-10-30 11:25
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册