ホームページ >バックエンド開発 >C++ >Meyers のシングルトン実装は C 11 でスレッドセーフですか?

Meyers のシングルトン実装は C 11 でスレッドセーフですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-21 07:26:10456ブラウズ

Is Meyers' Singleton Implementation Thread-Safe in C  11?

Meyers のシングルトン設計はスレッドセーフですか?

遅延初期化を使用した Meyers のシングルトン パターンの実装では、次のような疑問が生じます。スレッドの安全性。ここでは、このコードが C 11 でスレッド セーフである理由と、スレッド セーフをどのように実現するかを分析します。

C 11 のスレッド セーフ

C 11 標準による、§6.7 [stmt.dcl] p4:

If control enters the declaration concurrently while the variable is being initialized, the concurrent execution shall wait for completion of the initialization.

これこれは、C 11 では、上記の実装がスレッドセーフになることを意味します。標準では、スレッドの実行は変数にアクセスする前に初期化の完了を待機し、スレッドの安全性を確保する必要があります。

コンパイラでのサポート

次のコンパイラは動的初期化をサポートします。この機能を有効にする同時実行による破棄:

  • Visual Studio: 以降サポートされています。 Visual Studio 2015
  • GCC: GCC 4.3 以降サポート

C 03 のメモ

C 03 では、コードはスレッドではありませんでした。安全。 Meyers 氏は、記事「C と二重チェック ロックの危険性」の中で、C 03 では、インスタンス化メソッドを完全にロックすることが、プラットフォーム間でスレッドの安全性を確保する最も簡単な方法であると示唆しています。

以上がMeyers のシングルトン実装は C 11 でスレッドセーフですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。