ホームページ >バックエンド開発 >C++ >C 11 のローカル静的変数の初期化はスレッドセーフですか?

C 11 のローカル静的変数の初期化はスレッドセーフですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2025-01-03 15:22:41642ブラウズ

Is C  11's Local Static Variable Initialization Thread-Safe?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。