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

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

Susan Sarandon
リリース: 2024-12-29 11:22:11
オリジナル
492 人が閲覧しました

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

C のローカル静的変数の初期化 11: スレッド セーフティ

質問: C の

11、以下の例のような静的ローカル変数のコンストラクターは正確に実行されますか?マルチスレッドのシナリオでも一度だけ?

Logger& g_logger() {
    static Logger lg;
    return lg;
}
ログイン後にコピー

答え:

セクション 6.7 の C 11 標準に従って、静的ローカル変数は最初に初期化されます。時間制御はその宣言を通過します。この初期化は、同時実行を続行する前に完了する必要があります。さらに、実装では、この初期化中にデッドロックが発生することは禁止されています。

コンパイラ実装:

gcc 4.7、vc 2011、clang などの一般的なコンパイラの現在のリリース3.0 では、このスレッドセーフな動作を適切に実装してください。したがって、ローカル静的変数は 1 回だけ初期化され、マルチスレッド シナリオでの正しい動作が保証されることが保証されます。

補足:

静的ローカル変数の初期化はスレッドセーフですが、lg などの参照を介した後続の変数へのアクセスは追加しない限りスレッドセーフではない可能性があることに注意することが重要です。同期対策が実施されます。

以上がC 11 の静的ローカル変数の初期化はスレッドセーフですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート