我有一个执行某些工作的方法。我在该方法中使用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);
}
以我的方式使用秒表是否安全?结果是准确的还是我需要明确地锁定它以便线程不会跨越彼此的经过时间的值?
答案 0 :(得分:1)
不涉及线程安全问题,因为您没有跨线程共享Stopwatch
的实例。
理论上Stopwatch.StartNew
可能是线程不安全的,but it is not:
此类型的任何公共静态(在Visual Basic中为Shared)成员都是 线程安全。