JetBrains Rider 2024.1 ヘルプ

コード検査: ダブルチェックロックパターンの誤った実装の可能性: チェックされたフィールドへの可能な複数の書き込みアクセス。

次のコードを考えてみましょう。

public class Foo { private static Foo instance; private static readonly object padlock = new object(); public static Foo Get() { if (instance == null) { lock (padlock) { if (instance == null) { instance = new Foo(); } } } return instance; } };

上記のコードが与えられた場合、Foo インスタンスを初期化する書き込みはインスタンス値の書き込みまで遅延し、インスタンスが初期化されていない状態でオブジェクトを返す機能があります。

これを避けるには、インスタンス値を volatile にする必要があります。