自旋构造(更新)c#

int x;

void MultiplyXBy (int factor)
{
  var spinWait = new SpinWait();
  while (true)
  {
    int snapshot1 = x;
    Thread.MemoryBarrier();
    int calc = snapshot1 * factor;
    int snapshot2 = Interlocked.CompareExchange (ref x, calc, snapshot1);
    if (snapshot1 == snapshot2) return;   // 没有被抢占
    spinWait.SpinOnce();
  }
}
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)




原文地址:https://www.cnblogs.com/kexb/p/6793690.html