C#經典面試題:
有3個線程,A線程打印1,B線程打印2,C線程打印3,請用程序實現依次打印123123123...
1 class PRogram 2 { 3 static void Main(string[] args) 4 { 5 var mt = new MyThread(); 6 mt.Run(); 7 8 Console.ReadLine(); 9 }10 }11 12 13 internal class MyThread14 {15 private int number = 0;16 object obj = new object();17 18 public void Run()19 {20 var ta = new Thread(PrintNumber);21 var tb = new Thread(PrintNumber);22 var tc = new Thread(PrintNumber);23 24 ta.Start("1");25 tb.Start("2");26 tc.Start("3");27 }28 29 private void PrintNumber(object num)30 {31 for (int i = 0; i < 9; i++)32 {33 lock (obj)34 {35 if (Convert.ToInt32(num) == number + 1 || Convert.ToInt32(num) == number - 2)36 {37 Console.Write(num);38 number = Convert.ToInt32(num);39 40 // 通知正在等候的線程41 Monitor.PulseAll(obj);42 }43 else44 {45 // 本輪不應該打印的線程,就讓他到lock外面等候通知46 // 因為本次他也執行了判斷,所以循環就少了一次47 i--;48 Monitor.Wait(obj);49 }50 }51 } 52 }53 }
偷 @宋興柱-Sindrol 同學的代碼:C#中添加三個線程同時啟動執行某一方法,并依次調用某方法中的循環打印輸
新聞熱點
疑難解答