コードインスペクション: 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 にする必要があります。
2026 年 6 月 12 日