マイヤーズのシングルトン実装で特異点を強制する方法
従来のシングルトン パターンでは、クラスは単一のインスタンスへの参照を維持し、そのインスタンスを返します。要求。ただし、Meyers の実装は、static キーワードを利用し、静的ストレージ期間を通じて単一性を実現します。
内部的には、この実装は、インスタンスが 1 つだけであることを保証するグローバル ガード変数を含む C 98 実装と同等であると見なされます。存在します。 instance() 関数が呼び出されると、インスタンスが作成されたかどうかがチェックされます。そうでない場合は、ガード変数が設定され、新しいインスタンスが割り当てられます。それ以外の場合は、既存のインスタンスが返されます。
スレッド セーフ
Meyers の実装は、静的ガード変数を使用しているため、スレッド セーフです。この変数はインスタンスの作成中にアトミックに更新され、一度に 1 つのスレッドだけがインスタンスを作成できるようにします。
Meyers と Wikipedia の実装
Meyers と Wikipedia の両方実装はシングルトン パターンに従います。ただし、いくつかの重要な違いがあります。
単純さ: Meyers の実装はより簡潔で、必要な定型コードが少なくなります。
効率: Meyers の実装は次のようになります。同期メカニズムを使用しないため、より効率的になる可能性があります。
スレッド安全性: どちらの実装もスレッドセーフですが、Wikipedia の実装は明示的な同期を使用しているため、追加のオーバーヘッドが発生する可能性があります。
結論
Meyers の遅延初期化手法は、シングルトン パターンを効果的に強制します。スレッドセーフな実装を提供します。そのシンプルさと効率性により、C でのシングルトン実装に適した選択肢となっています。
以上がマイヤーズのシングルトン実装は特異性とスレッドの安全性をどのように保証しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。