ホームページ > バックエンド開発 > C++ > Meyer のシングルトン実装は本当にシングルトンですか? スレッドセーフな代替実装とどう比較するのでしょうか?

Meyer のシングルトン実装は本当にシングルトンですか? スレッドセーフな代替実装とどう比較するのでしょうか?

Patricia Arquette
リリース: 2024-12-13 01:20:13
オリジナル
747 人が閲覧しました

Is Meyer's Singleton Implementation Truly a Singleton, and How Does it Compare to Thread-Safe Alternatives?

Meyer の実装: 真のシングルトンの性質を探る

静的 Singleton&instance() として表される Meyer のシングルトン実装は、そのシングルトン機能に関して疑問を引き起こします。

シングルトン パターンの強制

シングルトンの性質は static キーワードに由来します。ローカル変数の静的ストレージ期間は、プログラム全体でインスタンスが 1 つだけ存在することを意味します。

次の同等の疑似コード (実際の C 98 コードではありません) を考えてみましょう:

static bool __guard = false;
static char __storage[sizeof(Singleton)];

Singleton& Instance() {
  if (!__guard ) {
    __guard = true;
    new (__storage) Singleton();
  }
  return *reinterpret_cast<Singleton*&>(__storage);
}
ログイン後にコピー

これは、元のコードの動作を大まかにカプセル化しています。

スレッドの安全性に関する考慮事項

実際の C 11実装では、各静的に対してガード変数が使用され、スレッドのバリアとして機能します。

実装の比較

どちらの実装もシングルトンの整合性を強制しますが、スレッド処理とコードの複雑さが異なります。

  • マイヤーズ実装:

    • より単純なコード
    • マルチスレッド用に追加の同期メカニズムが必要になる場合があります
  • Wikipedia実装:

    • より複雑なコード
    • 組み込みのスレッド セーフを提供します

結論

Meyer の実装は、静的ストレージ期間により複数のデータを保存できないため、確かにシングルトンです。インスタンス化。 2 つの実装のどちらを選択するかは、特定のアプリケーションとマルチスレッドの考慮事項によって異なります。

以上がMeyer のシングルトン実装は本当にシングルトンですか? スレッドセーフな代替実装とどう比較するのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート