ロックオブジェクトとして使用するために正しく初期化されることが保証されている静的な読み取り専用メンバ変数です。つまり、一度に1つのインスタンスにしか触れない(別のプロセスを心配する必要はなく、1つのプロセスでのみ) 。ライブラリクラス自体は、複数のスレッドで複数のインスタンスを持つことができるので、一度に1つのインスタンスしかそのリソースにアクセスしないように、ロックを使用する必要があります。C#のロックオブジェクトは遅延初期化を必要としますか?
私はこのようなロックオブジェクトの宣言をたくさん見てきました。
private static readonly object _lockObj = new object();
private static readonly Lazy<object> _lockObj = new Lazy<object>(() => new object());
P.S.私はロックのためのC#のlock(_lockObj){...}
キーワードを参照しています。
どのオブジェクトでもロックを行うことができます。あなたの言うことが真実であれば、 'static readonly'フィールドは意図していない複数の値を持つことができます。彼らが同じクラスにアクセスしている限り、あなたは行かなくてはなりません。 –
CLRは、タイプがappdomainごとに1回初期化されることを保証します。静的フィールド初期化子は、型初期化子の内部で、型の静的コンストラクタの本体の前に実行されます(存在する場合)。したがって、2つのスレッドが同じappdomain内のメソッドを起動していると仮定すると、異なるロックオブジェクトを取得するレースが行われる可能性はありません。 –
このように動作しないと、ソリューションがどのように役立つかわかりません。 2つの異なるオブジェクトを初期化する2つの 'Lazy'インスタンスがあるというリスクで問題を移動するだけです。 –