似乎有很多关于多线程编程的知识要学习,而且有点吓人。
对于我目前的需求,我只想防止在另一个线程完成之前再次调用一个方法,我的问题是:
这是使方法线程安全的适当(安全)方法吗?
class Foo
{
bool doingWork;
void DoWork()
{
if (doingWork) // <- sophistocated thread-safety
return; // <-
doingWork = true;
try
{
[do work here]
}
finally
{
doingWork = false;
}
}
}
如果这还不够,那么实现这一目标的最简单方法是什么?
编辑:有关该场景的更多信息:
Foo 只有一个实例
Foo.DoWork() 将在 System.Timers.Timer 的 Elapsed 事件上从 ThreadPool 线程调用。
通常 Foo.DoWork() 将在下一次调用之前完成 eons,但我想编写代码以防止它运行很长时间,并在完成之前再次被调用。
(我也不够聪明,无法确定这个问题是否可以标记为与语言无关,所以我没有。开明的读者,如果适用,请随时这样做。)