Meyers のシングルトン実装のスレッド セーフ
遅延初期化を使用した提供された Meyers のシングルトン実装では、コードは C でスレッド セーフです。 11. C 11 標準 (§6.7 [stmt.dcl] p4) に従って、複数の場合スレッドは初期化中にシングルトンへのアクセスを試みますが、他のスレッドは初期化が完了するまで待機します。
GCC と Visual Studio は両方ともこのスレッド セーフティ機能 (動的初期化と同時実行による破棄) をサポートしていますが、実装は異なります。日付:
対照的に、このコードは C 03 ではスレッドセーフではありません。Meyers の記事「C と二重チェック ロックの危険性」シングルトン パターンのさまざまなスレッドセーフ実装を分析します。最終的に、Meyers は、(C 03 で) インスタンス化メソッドの周りに完全なロックを使用することが、異なるプラットフォーム間での同時実行性を確保する最も簡単なアプローチであると結論付けています。一方、二重チェックされたロック パターンのバリアントは、命令間にメモリ バリアが戦略的に配置されていない限り、特定のアーキテクチャで競合状態を引き起こす可能性があります。
以上がMeyers のシングルトン実装は C 11 および C 03 でスレッドセーフですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。