C のローカル静的変数初期化のスレッド セーフティ 11
質問: C の
11、以下のようなローカル静的変数のコンストラクターが実行されることは保証されていますか?マルチスレッド コンテキストで 1 回だけ実行されますか?
Logger& g_logger() { static Logger lg; return lg; }
答え:
はい、lg のコンストラクターは 1 回だけ実行されることが保証されています。
C 11 標準 (セクション 6.7) では、コントロールが最初に宣言を通過するときにローカル静的変数が初期化されると規定しています。このような初期化は、同時実行が続行される前に完了することが保証されます。さらに、イニシャライザの実行中にデッドロックが発生しないように実装する必要があります。
したがって、C 11 では、ローカル静的変数のスレッドセーフな初期化が標準によって強制されます。
実装ステータス:
人気のあるコンパイラの最新リリース (gcc を含む) 4.7、Visual C 2011、および Clang 3.0) は、C 11 標準に従ってローカル静的変数のスレッドセーフな初期化を正しく実装することが検証されています。
以上がC 11 のローカル静的変数の初期化はスレッドセーフですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。