使用を考えていた場合:
ロック(これ)
あなたはあなたのインスタンスを見ているので、あなたのクラスのユーザーもそれをロックしてあなたを台無しにする可能性があることを知っておくべきです. それが問題になるかどうかは、ユーザーが何をするかによって決まります。あなたがやっている場合、同じ状況が存在します:
lock(typeof(MyClass))
これを行いたくない場合は、静的オブジェクトまたはインスタンス オブジェクト (つまり、オブジェクト myLock = new object()) を簡単に割り当てて、それをロックできます。
ソース
参照型と値型のロックに関する限り、取得時にリソースをロックするというこのSO の質問には答えがあります。
タイプによって異なります-参照型の場合ははい、値型の場合はいいえ。これは、値の型がボックス化され、その値をロックしようとすると、実際には別のオブジェクトのロックが取得されるため、決して値の型をロックしてはならない理由でもあります。
ロックステートメントの定義:
lock ステートメント(C# リファレンス)
lock キーワードは、特定のオブジェクトの相互排除ロックを取得し、ステートメントを実行してからロックを解放することにより、ステートメント ブロックをクリティカル セクションとしてマークします。
C# のロック キーワードに関するこのSO の質問が役立つ場合があります。また、なぜ lock() が許可されていないのに、Monitor.Enter() が許可されているのかを確認することもできます。
コンパイラの仕様では、ロックの動作を次のように定義しています。
lock ステートメントの式のコンパイル時の型は、参照型であることが知られている > 型パラメーター (§25.1.1) でなければなりません。式のコンパイル時の型が値型を示すのは、コンパイル時のエラーです。