2014-02-05 11 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) 모든 공용 static 스레드로부터 안전합니다.

+0

감사합니다. @Andrey. 나는 [이] 때문에 궁금했다 (http://stackoverflow.com/questions/21573756/stopwatch-misbehaving-because-of-multiple-threads) 시나리오 나는 직면하고있다 : – Cranialsurge