01 | using System; |
02 | using System.Collections.Generic; |
03 | using System.Linq; |
04 | using System.Text; |
05 | using System.Threading; |
06 |
07 | namespace ConsoleApplication3 |
08 | { |
09 | class Program |
10 | { |
11 | static long Sum=0; |
12 | static object mylock; |
13 | static void Main( string [] args) |
14 | { |
15 | long n = 0; |
16 | long s1 = DateTime.Now.Ticks; |
17 | for ( int i = 0; i <= 100; i++) |
18 | { |
19 | n += i; |
20 | Thread.Sleep(10); |
21 | } |
22 | long s2 = DateTime.Now.Ticks; |
23 | Console.Write( "----------------单线程运行-------------------\nsum:" + n + "\n\r所花时间(纳秒):" + (s2 - s1)+ "\n" ); |
24 | Console.Write( "----------------双线程运行-------------------\n" ); |
25 | Thread t1 = new Thread(add1); |
26 | Thread t2 = new Thread(add2); |
27 | mylock = new object (); |
28 | s1 = DateTime.Now.Ticks; |
29 | t1.Start(); |
30 | t2.Start(); |
31 | t1.Join(); |
32 | t2.Join(); |
33 | s2 = DateTime.Now.Ticks; |
34 | Console.Write( "sum:" + n + "\n\r所花时间(纳秒):" + (s2 - s1)); |
35 | Console.ReadKey(); |
36 | } |
37 | static void add1() |
38 | { |
39 | long n = 0; |
40 | for ( int i = 0; i <= 50; i++) |
41 | { |
42 | n += i; |
43 | Thread.Sleep(10); |
44 | } |
45 | Monitor.Enter(mylock); |
46 | Sum += n; |
47 | Console.Write( "线程一运行完毕,Sum:" + Sum+ "\n" ); |
48 | Monitor.Exit(mylock); |
49 | |
50 | |
51 | } |
52 | static void add2() |
53 | { |
54 | long n = 0; |
55 | for ( int i = 51; i <= 100; i++) |
56 | { |
57 | n += i; |
58 | Thread.Sleep(10); |
59 | } |
60 | Monitor.Enter(mylock); |
61 | Sum += n; |
62 | Console.Write( "线程二运行完毕,Sum:" + Sum + "\n" ); |
63 | Monitor.Exit(mylock); |
64 | |
65 | } |
66 | } |
67 | } |