ホームページ > バックエンド開発 > C++ > C 11 はローカル静的変数のスレッドセーフな初期化をどのように保証しますか?

C 11 はローカル静的変数のスレッドセーフな初期化をどのように保証しますか?

Barbara Streisand
リリース: 2024-12-24 12:11:15
オリジナル
243 人が閲覧しました

How Does C  11 Guarantee Thread-Safe Initialization of Local Static Variables?

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

C 11 のローカル静的変数のスレッドセーフな初期化に関して懸念が提起されました。 C とさまざまな標準にわたるその進化。これを C 11 のコンテキストで具体的に説明しましょう。

C 11 標準

セクション 6.7 の C 11 標準 (ドラフトではありません) では、次のように指定されています。

  • ローカル静的変数は、コントロールが初めて変数に入るときに初期化されます。
  • 変数の初期化中に宣言に入る同時実行は、初期化の完了を待つ必要があります。
  • 実装では、初期化子の実行中にデッドロックが発生してはなりません。

したがって、C 11 では、ローカル静的変数のスレッドセーフな初期化は次のようになります。

一般的なコンパイラの実装

次のような主要なコンパイラ:

  • gcc 4.7
  • vc 2011
  • カラン3.0

は、C 11 標準で要求されるスレッドセーフな初期化動作を適切に実装しました。これにより、例の lg のようなローカル静的変数のコンストラクターは、マルチスレッド環境であっても 1 回だけ実行されることが保証されます。

追加の考慮事項

重要スレッドセーフな初期化は変数自体の初期化にのみ適用されることに注意してください。追加の同期メカニズムが使用されない限り、参照を介した変数への後続のアクセスがスレッドセーフであることは保証されません。

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

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