【发布时间】:2013-05-04 07:01:11
【问题描述】:
好的,我有一个相当简单的问题,我找不到简明的答案。我想知道在读取 Stopwatch 的 elapsed 属性时是否需要担心调用 lock() 语句,而它仍在运行。
也是一个Stopwatch,我应该用它来测量线程的运行时间。我读过其他类似的问题,可以使用DispatchTimer。我也研究过使用事件,但是对于如此简单的事情来说似乎有很多开销,请告诉我这是否完全错误并且我应该使用事件。一些简单的代码来说明我在说什么。
class foo
{
private bool _isRunning { get; set; }
private Stopwatch sw { get; set; }
public void StartThread()
{
this._isRunning = true;
new Thread(new ThreadStart(this.DoWork)).Start();
this.sw.Restart();
}
public void StopThread()
{
this._isRunning = false;
this.sw.Stop();
}
private void DoWork()
{
while(this._isRunning)
{
//Do Stuff
}
}
public TimeSpan GetRuntime()
{
return this.sw.Elapsed;
}
public foo()
{
_isRunning = false;
sw = new Stopwatch();
}
}
假设在使用上述类的应用程序中,我要在停止 Stopwatch 之前从不同的线程调用 GetRuntime() 是否需要添加 lock() 语句以确保获得正确的数据,并且我不会阻止Stopwatch 继续运行。或者我认为它不需要lock() 并且会很好。
我确实理解理论上您可以根据需要运行任意数量的读取,我只是好奇地看到 Elapsed 属性后备存储是否会不断被写入是否改变了事情。我已经阅读了很多关于线程安全的信息,但我只是在寻找一个澄清和确认我确实在考虑这个问题。
【问题讨论】:
-
这能回答你的问题吗? Is Stopwatch.ElapsedTicks threadsafe?
标签: c# .net multithreading thread-safety