• 多线程插队输出两个数组


    用两个线程将两个数组轮流输出(数组可能不等长)
    例如:输入a1[1,3,5,7],a2[2,4,6,8,10] 输出1,2,3,4,5,6,7,8,10

    主要是设置一个信号开关,其中一个执行时候另外一个必须处于自旋等待状态,执行完成后修改状态给另外一个线程执行

    1、可用lock锁住信号

    2、使用volatile

            //信号开关
            static volatile bool sw = true;
    
            //短数组是否完成遍历
            static volatile bool over = false;
    
            static void Main(string[] args)
            {
                int[] a1 = new int[] { 1, 2, 3, 4 };
                int[] a2 = new int[] { 5, 6, 7, 8, 9 };
    
                SpinWait spinWait = new SpinWait();
                Task.Run(() =>
                {
                    for (int i = 0; i < a1.Length; i++)
                    {
                        while (!sw && !over)
                        {
                            //自旋
                            spinWait.SpinOnce();
                        }
                        if (sw)
                        {
                            Console.WriteLine(a1[i]);
                            sw = false;
                        }
                    }
                    over = true;
    
                });
                Task.Run(() =>
                {
                    for (int i = 0; i < a2.Length; i++)
                    {
                        while (sw && !over)
                        {
                            spinWait.SpinOnce();
                        }
                        if (!sw || over)
                        {
                            Console.WriteLine(a2[i]);
                            sw = true;
                        }
                    }
                    over = true;
                });
    
                Console.ReadKey();
            }
  • 相关阅读:
    AcWing 1081. 度的数量
    CF584D Dima and Lisa
    [ABC130F] Minimum Bounding Box
    AT4289 [ABC133E] Virus Tree 2
    Arc of Dream HDU
    Reading comprehension HDU
    【洛谷 1541】乌龟棋
    【洛谷 4880】抓住czx
    【洛谷 1525】关押罪犯
    【洛谷 1040】加分二叉树
  • 原文地址:https://www.cnblogs.com/leeafei/p/10477578.html
Copyright © 2020-2023  润新知