首页 新闻 会员 周边 捐助

Thread.SpinWait和Thread.Sleep区别

0
[已解决问题] 解决于 2008-08-06 10:15
<P>想请问一下,它们两个的区别是什么,好像都是等待几秒钟</P>
lexus的主页 lexus | 初学一级 | 园豆:0
提问于:2008-08-06 10:03
< >
分享
最佳答案
1
MSDN解释: SpinWait 方法在实现锁定方面十分有用。.NET Framework 中的类(例如 Monitor 和 ReaderWriterLock)在内部使用此方法。SpinWait 实质上会将处理器置于十分紧密的循环中,其循环计数由 iterations 参数指定。因此,等待的持续时间取决于处理器的速度。 针对这一点,将此方法与 Sleep 方法进行对比。调用 Sleep 的线程会产生其处理器时间当前片断的剩余部分,即使指定的时间间隔为零也不例外。如果为 Sleep 指定非零的时间间隔,则线程计划程序会不考虑该线程,直到该时间间隔结束。
TerryLee | 老鸟四级 |园豆:3300 | 2008-08-06 10:08
其他回答(1)
-1

我有必要 警告一下: Thread.SpinWait(10); //休眠10毫秒,性能会极差, CPU 会被占满

 

我这边有一个需求,不想使用 内置 Timer —— 所以需要线程休眠。

每隔10毫秒执行一次。

do{

Thread.SpinWait(10);  //自旋10毫秒

Thread.Sleep(10);       //休眠10毫秒

}while(true);

 

结果:Thread.SpinWait(10);  CPU被占满 100% —— “自旋” (这个词的意思 或许就是说:没事做的时候,也要折腾一点事儿出来)。

——————————————————————

当然:

Thread.SpinWait(10);  精度准一点(没有线程的 唤醒时间,休眠10ms,实际休眠 10.001 ms)

Thread.Sleep(10);  精度差一点(有线程的 唤醒时间,休眠10ms,实际休眠 10.1 ms)

 

 

 

 

InkFx | 园豆:416 (菜鸟二级) | 2016-04-17 15:13
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册