多线程插队输出两个数组
用两个线程将两个数组轮流输出(数组可能不等长) 例如:输入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(); }