2014-02-05 83 views
1

我有一個方法可以執行一些工作。我在該方法中使用System.Diagnostics.Stopwatch來測量執行該方法執行任務所用的時間。這種方法被多個線程多次調用,如下所示:在多線程調用的方法中使用Stopwatch安全嗎?

ArrayList workerThreads = new ArrayList(); 

    for (int i = 0; i < numThread; i++) 
     { 
      Thread workerThread = new Thread(DoWork); 
      workerThread.IsBackground = true; 
      workerThreads.Add(workerThread); 
     } 

for (int i = 0; i < numThread; i++) 
      {     
       ((Thread)workerThreads[i]).Start(); 
      } 

public void DoWork() 
{ 
    Stopwatch sw = Stopwatch.StartNew(); 
    // Do something 
    sw.Stop(); 
    Log.Info(sw.ElapsedMilliseconds); 

} 

按照我的方式使用秒錶是否安全?結果是準確的還是我需要明確地鎖定它,以便線程不會跨越彼此的經過時間值?

回答

1

不涉及線程安全問題,因爲您不跨線程共享Stopwatch的實例。

理論上Stopwatch.StartNew可以線程不安全,but it is not

任何公共靜態此類型的成員(在Visual Basic中的Shared)是 線程安全的。

+0

謝謝@Andrey。我很好奇,因爲我面對的是[this](http://stackoverflow.com/questions/21573756/stopwatch-misbehaving-because-of-multiple-threads)場景: – Cranialsurge

相關問題