线程同步——SpinWait

作者:追风剑情 发布于:2017-9-23 11:31 分类:C#

示例:线程自旋

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);
        }
    }
}

运行测试

111111.png

标签: C#

Powered by emlog  蜀ICP备18021003号-1   sitemap

川公网安备 51019002001593号