似乎有很多关于多线程编程的知识,它有点吓人。使整个方法线程安全的最简单方法?
对于我目前的需要,我只是想防止的方法从另一个线程再次被称为完成之前,我的问题是:
这是适当的(安全)的方法,使方法线程安全?
class Foo
{
bool doingWork;
void DoWork()
{
if (doingWork) // <- sophistocated thread-safety
return; // <-
doingWork = true;
try
{
[do work here]
}
finally
{
doingWork = false;
}
}
}
如果这还不够,什么是实现这一目标的最简单的方法?
编辑:关于方案更多信息:
有富的只有一个实例
Foo.DoWork()将被从线程池线程呼吁Elapsed System.Timers.Timer的事件。
通常Foo.DoWork()将在下一次的 称为前完成劫,但我要为渺茫的机会,它会长期来看, 并获得完成之前再次调用代码。
(我还没有聪明到可以肯定,如果这个问题能够标记语言无关,所以我没有。开明的读者,可随时做,如果适用)。
是为每个线程实例化一个Foo类型的对象,还是它跨多个线程共享? – NotMe
提供有关调用dowork方法的代码的更多细节,是否有多个线程? – sll
要么支持重入,要么设计你的代码,这样它就不会发生。只要在事件发生时进行救助就不太可能是正确的解决方案。但是你的编辑清楚地表明线程安全实际上是问题,而不是重新进入。 –