似乎有很多關於多線程編程的知識,它有點嚇人。使整個方法線程安全的最簡單方法?
對於我目前的需要,我只是想防止的方法從另一個線程再次被稱爲完成之前,我的問題是:
這是適當的(安全)的方法,使方法線程安全?
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
要麼支持重入,要麼設計你的代碼,這樣它就不會發生。只要在事件發生時進行救助就不太可能是正確的解決方案。但是你的編輯清楚地表明線程安全實際上是問題,而不是重新進入。 –