私はスレッドセーフなシングルトンについて読んでいて、どこにでもある実装には次のようなgetInstance()メソッドがあります。
Singleton* getInstance()
{
if ( !initialized )
{
lock();
if ( !initialized )
{
instance = new Singleton();
initialized = true;
}
unlock();
}
return instance;
}
- これは実際にスレッドセーフですか?
- 何かを見逃したことがありますか、または「初期化された」がインスタンスの前に並べ替えられて設定される可能性があるため、この関数が初期化されていないインスタンスを返す可能性はわずかですか?
この記事は少し異なるトピックですが、一番上の答えは、上記のコードがスレッドセーフではないと思う理由を説明しています。