zoukankan      html  css  js  c++  java
  • 《C#多线程编程实战》2.10 SpinWait

    emmm

    这个SpinWait

    中文是自旋等待的意思。

    所谓自旋,就是自己追自己影子,周伯通的左右手互博,不好听就是放屁自己追着玩,小狗转圈咬自己的尾巴

    SpinWait是一个结构体,并不是一个类。

    书上给的是SpinOnce

    就是执行一个自旋

    说白的也就是等待一次

    class Program
        {
            static void Main(string[] args)
            {
                var t1 = new Thread(UserModeWait);
                var t2 = new Thread(HybridSpinWait);
    
                WriteLine("Running user mode waiting");
                t1.Start();
                Thread.Sleep(20);
                _isCompleted = true;
                Thread.Sleep(TimeSpan.FromSeconds(1));
                _isCompleted = false;
                WriteLine("Running hybrid SpinWait construct waiting");
                t2.Start();
                Thread.Sleep(TimeSpan.FromSeconds(15));
                _isCompleted = true;
            }
    
            static volatile bool _isCompleted = false;
    
            static void UserModeWait()
            {
                while (!_isCompleted)
                {
                    Write(".");
                }
                WriteLine();
                WriteLine("Waiting is complete");
            }
    
            static void HybridSpinWait()
            {
                var w = new SpinWait();
        
               
                while (!_isCompleted)
                {
                    w.SpinOnce();
                    //WriteLine(w.NextSpinWillYield);
                }
                WriteLine("Waiting is complete");
             
            }
        }

     重点是:

       var w = new SpinWait();
        
               
                while (!_isCompleted)
                {
                    w.SpinOnce();
                    //WriteLine(w.NextSpinWillYield);
                }

    上文说 自旋等待

    那怎么就等待了,其实就是设定一个限定的while循环

    让此线程一直忙碌,等待这个方法结束。来实现线程等待

    将代码改成

    var w = new SpinWait();
        
                
                while (!_isCompleted)
                {
                    w.SpinOnce();
                    WriteLine(w.Count);
                }

    输出一下 自旋等待的次数,你就发现 如何实现等待的

     还是简单明了的

    利用一个可限定的循环,进行等待。

  • 相关阅读:
    codeforce 266c Below the Diagonal 矩阵变换 (思维题)
    8月21日训练日记
    CodeForces 651B Beautiful Paintings
    CodeForces 651 C Watchmen
    CodeForces 17D Notepad(同余定理)
    CodeForces 19B Checkout Assistant
    Code Forces 18D Seller Bob(简单DP)
    HOJ Recoup Traveling Expenses(最长递减子序列变形)
    ZOJ 3469Food Delivery(区间DP)
    Code Forces 149DColoring Brackets(区间DP)
  • 原文地址:https://www.cnblogs.com/T-ARF/p/9443091.html
Copyright © 2011-2022 走看看