C 11 のローカル静的変数のスレッドセーフな初期化
C 11 のローカル静的変数のスレッドセーフな初期化に関して懸念が提起されました。 C とさまざまな標準にわたるその進化。これを C 11 のコンテキストで具体的に説明しましょう。
C 11 標準
セクション 6.7 の C 11 標準 (ドラフトではありません) では、次のように指定されています。
したがって、C 11 では、ローカル静的変数のスレッドセーフな初期化は次のようになります。
一般的なコンパイラの実装
次のような主要なコンパイラ:
は、C 11 標準で要求されるスレッドセーフな初期化動作を適切に実装しました。これにより、例の lg のようなローカル静的変数のコンストラクターは、マルチスレッド環境であっても 1 回だけ実行されることが保証されます。
追加の考慮事項
重要スレッドセーフな初期化は変数自体の初期化にのみ適用されることに注意してください。追加の同期メカニズムが使用されない限り、参照を介した変数への後続のアクセスがスレッドセーフであることは保証されません。
以上がC 11 はローカル静的変数のスレッドセーフな初期化をどのように保証しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。