lock ステートメントを使用すると、「あるスレッドがコードのクリティカル セクションに入っているときに、別のスレッドがクリティカル セクションに入らないようにすることができます。別のスレッドがロックされたコードに入ろうとすると、オブジェクトが解放されるまで待機し、ブロックします。 ."
別のスレッドがロックされたコードに入ろうとした場合に、(ロックが解放されるのを待つのではなく) コード全体をスキップするという動作が必要な場合はどうすればよいでしょうか? 私の頭に浮かぶアイデアは、次のようなフラグを使用することです
if(flag) return;
flag = true;
//do stuff here
flag =false;
しかし、2 つのスレッドが true に設定される前に 2 つのスレッドが最初の行を通過する可能性があるか、例外が発生した場合にフラグが false に設定されないため、これは安全ではないことを私は知っています。