静的メソッド中で使うなら静的変数を使います。)例として、先ほどのプログラムに対して排他制御を施してみましょう。必要な部分のみ抜き出すと以下のようになります。}});実行結果は以下のように変わります。ブロック内がクリティカルセクションになります。ブロック内に記述します。先に進めなくなります。複数のスレッドから同時に処理されることがなくなります。排他制御の手順をまとめると以下のようになります。文と言う排他制御のための専用の構文があります。文は以下のようにして用います。クラスを用いた排他制御用のコードを生成してくれます。文を使って書き換えると以下のようになります。}});実行結果は先ほどの例と同様に以下のようになります。4で変更がありました。それ以前は、以下のようなパターンに展開されていました。呼ばれない問題がありました。4で以下のように実装が変更されたそうです。3.5以前はバグっていて動作が不安定だったかというと、頑張って特殊対応して問題を回避しています。上記コードで、どんな最適化を掛けようとも、どんな実行の仕方をしようとも、Monitor.Enterとtryの隙間に絶対に何の命令も挟まらなくする特殊対応を入れて、この隙間でスレッドのAbortが発生しないようにしていたそうです。特殊対応過ぎて、新しいプラットフォームに対応するたびにバグが発生するリスクがありました。リリース後しばらくは危なかったそうです(気付いてすぐに修正)。そこで、特殊対応が要らない現在の実装方法への変更が掛かりました。ちなみに、コード生成の結果は、ターゲットとする環境によって切り替わります。bool)が使われます。3.5以前であればEnter(object)が使われます。volatileコンパイラは、コードの最適化の過程で、不要な部分を丸々削除してしまう場合があります。不要に見えても実は必要な部分が生じる可能性があります。書き込みをせず、他のスレッドから値を書き込むという場合を考えてみてください。コンパイラからすると、値を書き換えもしないのに何度も読み出してる無駄なコードに見えます。揮発性、変わりやすい)という修飾子をつけます。コンパイラの最適化によって削除されることはありません。まで気兼ねなくご連絡ください。ついて運営者について。