C 11 ローカル静的変数の初期化: スレッド セーフティ
C 11 のローカル静的変数の初期化のスレッド セーフティに関しては、これまでに数多くの議論が行われてきました。議論。この記事は、現在の標準と実装状況に基づいて包括的な回答を提供することを目的としています。
C 11 ローカル静的変数のスレッドセーフ
C 11 のセクション 6.7標準では、ローカル静的変数の初期化は、コントロールが初めてその宣言を通過するときに行われると明示的に規定されています。さらに、初期化は完了すると完了したとみなされ、初期化の進行中に宣言に入る同時実行は完了するまで待つ必要があります。
コンパイラーでの実装
GCC 4.7、Visual C 2011、Clang 3.0 などの一般的なコンパイラは、標準に準拠しており、スレッドセーフな初期化を実装しています。ローカル静的変数。これにより、ローカル静的変数 (例の lg など) のコンストラクターが 1 回だけ実行され、スレッドセーフな初期化が保証されます。
追加の考慮事項
初期化はスレッドセーフですが、これは参照を介したその後の変数へのアクセスには適用されないことに注意することが重要です。したがって、標準では初期化段階を超えたスレッドセーフなアクセスに対する特定の保証が指定されていないため、初期化された変数の使用においてスレッドの安全性を確保する必要があります。
以上がC 11 のローカル静的変数の初期化はスレッドセーフですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。