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 では、上記の実装がスレッドセーフになることを意味します。標準では、スレッドの実行は変数にアクセスする前に初期化の完了を待機し、スレッドの安全性を確保する必要があります。
コンパイラでのサポート
次のコンパイラは動的初期化をサポートします。この機能を有効にする同時実行による破棄:
C 03 のメモ
C 03 では、コードはスレッドではありませんでした。安全。 Meyers 氏は、記事「C と二重チェック ロックの危険性」の中で、C 03 では、インスタンス化メソッドを完全にロックすることが、プラットフォーム間でスレッドの安全性を確保する最も簡単な方法であると示唆しています。
以上がMeyers のシングルトン実装は C 11 でスレッドセーフですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。