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 MyThread 14 { 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 else 44 { 45 // 本輪不應該打印的線程,就讓他到lock外面等候通知 46 // 因為本次他也執行了判斷,所以循環就少了一次 47 i--; 48 Monitor.Wait(obj); 49 } 50 } 51 } 52 } 53 }
偷 @宋興柱-Sindrol 同學的代碼:C#中添加三個線程同時啟動執行某一方法,並依次調用某方法中的循環打印輸