多線程16-SpinWait

     class Program
    {
         static  volatile  bool isCompleted =  false;
         static  void UserModeWait()
        {
             while(!isCompleted)
            {
                Console.Write( " . ");
            }
            Console.WriteLine();
            Console.WriteLine( " waiting is complete ");
        }
         static  void HybridSpinWait()
        {
             var w =  new SpinWait();
             while(!isCompleted)
            {
                w.SpinOnce();
                Console.WriteLine(w.NextSpinWillYield);

            }
            Console.WriteLine( " waiting is complete ");
        }
         static  void Main()
        {
             var t1 =  new Thread(UserModeWait);
             var t2 =  new Thread(HybridSpinWait);
            Console.WriteLine( " running user mode waiting ");
            t1.Start();
            Thread.Sleep( 20);
            isCompleted =  true;
            Thread.Sleep(TimeSpan.FromSeconds( 1));
            isCompleted =  false;
            Console.WriteLine( " running hybrid soinwait construct waiting  ");
            t2.Start();
            Thread.Sleep( 5);
            isCompleted =  true;         }     }
相關文章
相關標籤/搜索