マイヤーズのシングルトン実装の謎を解く
シングルトン設計パターンでは、プログラムの実行全体を通じてクラスのインスタンスが 1 つだけであることが保証されます。 Meyers による C 11 でのシングルトンの実装は、その効率性とスレッドセーフ性でよく称賛されています。これらの目標をどのように達成するかを詳しく見てみましょう。
Meyers の実装を理解する
Meyers のシングルトン実装では、静的キーワードと関数ローカル ストレージを利用して、オブジェクト。 Singleton クラスで定義された関数 instance() は、シングルトン インスタンスへの参照を返します。
static Singleton& instance() { static Singleton s; return s; }
変数 s に適用される static キーワードにより、静的なストレージ期間が確保されます。つまり、変数が存続期間中存在することになります。プログラムであり、固定メモリアドレスを持っています。関数ローカル ストレージにより、 の複数のインスタンスの作成が防止され、シングルトン パターンが効果的に適用されます。
内部のスレッド セーフティ
内部では、Meyers の実装は次の機能を活用しています。マルチスレッド環境であっても、シングルトンのインスタンスが 1 つだけ作成されることを保証するスレッド セーフティ メカニズム。 C11 のアトミック操作、つまり std::atomic
利点と欠点
従来のような他のシングルトン実装との比較Java のシングルトン パターン、Meyers の実装ではいくつかの機能が提供されます。利点:
ただし、Meyers の実装は、Singleton オブジェクトを破棄または再初期化する必要があるシナリオには適していない可能性があります。
結論
Meyers による C 11 でのシングルトンの実装は、シングルトンを実装するためのパフォーマンスが高くスレッドセーフな方法を提供します。 パターン。静的ストレージ期間とアトミック操作を活用することで、オブジェクトのインスタンスが 1 つだけ存在することが効果的に保証され、実装が簡素化され、信頼性が向上します。
以上がMeyers のシングルトン実装は、C 11 でスレッドセーフな効率をどのように達成するのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。