【问题标题】:Is it safe to use Stopwatch in a method called by multiple threads?在多线程调用的方法中使用秒表是否安全?
【发布时间】:2014-02-05 17:24:05
【问题描述】:

我有一个执行某些工作的方法。我在该方法中使用 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);

}

像我这样使用 Stopwatch 是否线程安全?结果是准确的还是我需要显式锁定它以便线程不会跨过彼此的 Elapsed time 值?

【问题讨论】:

标签: multithreading thread-safety stopwatch


【解决方案1】:

不涉及线程安全问题,因为您没有跨线程共享Stopwatch 的实例。

理论上Stopwatch.StartNew 可能是线程不安全的,but it is not

此类型的任何公共静态(在 Visual Basic 中为共享)成员都是 线程安全。

【讨论】:

  • 谢谢@Andrey。我很好奇因为this 我面临的场景:
猜你喜欢
  • 2016-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-25
  • 1970-01-01
  • 2016-04-17
  • 1970-01-01
相关资源
最近更新 更多