マルチスレッド プログラミングについては、学ぶべきことがたくさんあるようで、少しばかり気が引けます。
私の現在のニーズでは、メソッドが終了する前に別のスレッドから再度呼び出されないようにしたいだけです。私の質問は次のとおりです。
これは、メソッドをスレッドセーフにする適切な (安全な) 方法ですか?
class Foo
{
bool doingWork;
void DoWork()
{
if (doingWork) // <- sophistocated thread-safety
return; // <-
doingWork = true;
try
{
[do work here]
}
finally
{
doingWork = false;
}
}
}
それが十分でない場合、これを達成する最も簡単な方法は何ですか?
編集:シナリオに関する詳細情報:
Foo のインスタンスは 1 つだけです。
Foo.DoWork() は、System.Timers.Timer の Elapsed イベントで ThreadPool スレッドから呼び出されます。
通常、 Foo.DoWork() は次に呼び出されるまでに何百年も前に終了しますが、長く実行され、終了する前に再度呼び出されるわずかな可能性のためにコーディングしたいと思います。
(また、この質問に言語に依存しないタグを付けることができるかどうかを確認できるほど賢くないので、タグを付けていません。賢明な読者は、該当する場合は自由にタグを付けてください。)