自旋构造(更新)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毫秒
Thread.Sleep();       //休眠10毫秒
}while(true);
 
结果:Thread.SpinWait();  CPU被占满 % —— “自旋” (这个词的意思 或许就是说:没事做的时候,也要折腾一点事儿出来)。
——————————————————————
当然:
Thread.SpinWait();  精度准一点(没有线程的 唤醒时间,休眠10ms,实际休眠 10.001 ms)
Thread.Sleep();  精度差一点(有线程的 唤醒时间,休眠10ms,实际休眠 10.1 ms)


上一篇:Saltstack管理对象属性之grains和pillar组件


下一篇:Django中模板的用法简介