示例:线程自旋
using System;
using System.Threading;
using System.Diagnostics;
namespace SpinWaitTest
{
class Program
{
static void Main(string[] args)
{
Thread myThread;
for (int i = 0; i < 5; i++)
{
myThread = new Thread(new ThreadStart(MyThreadProc));
myThread.Name = String.Format("Thread{0}", i + 1);
myThread.IsBackground = true;
myThread.Start();
}
Console.ReadKey();
}
private static void MyThreadProc()
{
Console.WriteLine("{0} 自旋等待1秒", Thread.CurrentThread.Name);
var sw = Stopwatch.StartNew();
//自旋不会进入内核等待,所以性能比较高
//自旋只适合短时间等待,因为自旋不会让出自己的剩余时间片(即,一直占用CPU),会影响其他线程执行。
//在指定条件得到满足(参数1=>true)或指定超时过期之前自旋
//这里参数1设为false,直到3秒后超时,SpinWait结束自旋。
SpinWait.SpinUntil(() => false, 3000);
Console.WriteLine("{0} SpinWait Consume Time:{1}", Thread.CurrentThread.Name, sw.Elapsed);
}
}
}
运行测试