Безопасно ли использовать секундомер в методе, вызываемом несколькими потоками?

У меня есть метод, который выполняет некоторую работу. Я использую System.Diagnostics.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 ответ

Решение

There are no thread safety concerns involved, because you are not sharing instance of Stopwatch через темы.

Теоретически Stopwatch.StartNew could be thread unsafe, but it is not:

Любые открытые статические (Shared в Visual Basic) члены этого типа являются потокобезопасными.

Другие вопросы по тегам