Question

I have a method that performs some work. I use a System.Diagnostics.Stopwatch in that method to measure the time taken to execute the task performed by that method. This method is called several times by multiple threads as follows:

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);

}

Is it thread safe to use Stopwatch the way I am? Will the results be accurate or do I need to explicitly lock it so the threads won't step over each other's values of Elapsed time there?

Était-ce utile?

La solution

There are no thread safety concerns involved, because you are not sharing instance of Stopwatch across threads.

In theory Stopwatch.StartNew could be thread unsafe, but it is not:

Any public static (Shared in Visual Basic) members of this type are thread safe.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top