ReSharper 2025.3 ヘルプ

コード検査: Double-Check Locking パターンの実装が間違っている可能性があります。チェックされたフィールドへの複数の書き込みアクセスが可能です。

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

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 にする必要があります。

2024 年 2 月 11 日