多线程编程似乎需要学习的东西很多,让人有点不知所措。
就目前而言,我只是想防止在方法完成之前来自另一个线程的再次调用,并且我的问题是:
这种方式足以使方法变得线程安全吗?
class Foo
{
bool doingWork;
void DoWork()
{
if (doingWork) // <- sophistocated thread-safety
return; // <-
doingWork = true;
try
{
[do work here]
}
finally
{
doingWork = false;
}
}
}
如果这不够用,那么最简单的实现方式是什么?编辑:更多关于场景的信息:1)只有一个 Foo 实例;2)Foo.DoWork() 将从 System.Timers.Timer 的 Elapsed 事件中的 ThreadPool 线程调用;3)通常情况下,Foo.DoWork() 完成的时间比下一次调用它的时间早得多,但我想编写代码应对极小的可能性,即在完成之前再次调用。 (我也不确定这个问题是否可以标记为语言无关,所以我没有这样做。如果适用,请随意这样做。)