利用SpinWait进行工作线程同步

两个工作线程t1和t2,同时启动这两个线程,其中t2需要等待t1的执行结果达成某一条件之后再继续往下执行。

  class Program
    {
        private static int number = 0;

        private static void Method1()
        {
            for (int i = 0; i < 20; ++i)
            {
                number += 1;
                Thread.Sleep(1000);
                Console.WriteLine(number);
            }
        }

        private static void Method2()
        {
            for (int i = 0; i < 5; i++)
            {
                Thread.Sleep(1000);
                Console.WriteLine("Method2");
            }

            SpinWait.SpinUntil(() => number > 10);
            Console.WriteLine("A");
        }

        static void Main(string[] args)
        {
                number = 0;
                Thread t1 = new Thread(new ThreadStart(Method1));
                Thread t2 = new Thread(new ThreadStart(Method2));

                t1.Start();
                t2.Start();

                // 等待线程退出, Timeout.Infinite表示无限等待  
                while (t1.Join(Timeout.Infinite) && t2.Join(Timeout.Infinite))
                {
                    Console.ReadLine();
                    break;
                }
        }
    }

利用SpinWait进行工作线程同步_第1张图片

从执行结果可以看出,开始t1和t2都在输出内容,但t2输出5次之后便停止输出了,直到满足number>10这一条件才继续往下执行。

你可能感兴趣的:(多线程)