MultiThreadTester可以指定线程数,多个线程争抢计数。

 

1: class MultiThreadTester : ThreadTester
2:     {
3:         private Stopwatch _aStopWatch = new Stopwatch();
4:         private readonly int _threadCount = 0;
5:         private readonly object _counterLock = new object();
6:
7:         public MultiThreadTester(int threadCount)
8:         {
9:             this._threadCount = threadCount;
10:         }
11:
12:         public override void Start()
13:         {
14:             _aStopWatch.Start();
15:
16:             for (int i = 0; i < _threadCount; i++)
17:             {
18:                 Thread aThread = new Thread(() => WorkInThread());
19:                 aThread.Start();
20:             }
21:         }
22:
23:         public override long GetElapsedMillisecondsOfIncreaseCounter()
24:         {
25:             return this._aStopWatch.ElapsedMilliseconds;
26:         }
27:
28:         public override bool IsTesterRunning()
29:         {
30:             return _aStopWatch.IsRunning;
31:         }
32:
33:         private void WorkInThread()
34:         {
35:             while (true)
36:             {
37:                 lock (_counterLock)
38:                 {
39:                     if (this.GetCounter() > ThreadTester.MAX_COUNTER_NUMBER)
40:                     {
41:                         _aStopWatch.Stop();
42:                         break;
43:                     }
44:
45:                     this.IncreaseCounter();
46:                 }
47:             }
48:         }
49:     }

  Program的Main函数中,根据用户的选择来决定执行哪个测试类。