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#中添加三個線程同時啟動執行某一方法,並依次調用某方法中的循環打印輸