ホームページ >バックエンド開発 >C++ >マルチスレッド環境では C 整数の読み取りと書き込みはアトミックですか?

マルチスレッド環境では C 整数の読み取りと書き込みはアトミックですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-02 12:02:11747ブラウズ

Are C   Integer Reads and Writes Atomic in Multithreaded Environments?

C は Int アトミックの読み取りと書き込みを行いますか? [重複]

質問:

1 つのスレッドが更新し、別のスレッドが整数を読み取るマルチスレッド アプリケーションでは、これへのアクセスを同期する必要がありますか?マルチバイト値?部分的な書き込みを完了前に中断して、読み取りで不完全な値をキャプチャできるようにすることはできますか?

答え:

C での整数の読み取りと書き込みのアトミック性は依存します。のアーキテクチャについてsystem.

詳細:

  • IA32 システムの場合: 正しくアライメントされたアドレスにはアトミックな読み取りと書き込みが行われます。非整列書き込みはキャッシュによってはアトミックになる場合があります。
  • キャッシュ: メモリが単一の L1 キャッシュ ライン内にある場合、書き込みはアトミックになります。そうでない場合は、そうでない可能性があります。
  • バス幅: データ バスの幅はアトミック性に影響します。一部の古いシステムでは、整列されていないアドレスへの 16 ビット書き込みはアトミックではありませんでしたが、より広いバスを備えたシステムではアトミックでした。
  • コンパイラの最適化: C/C では、次のマークを付けることが重要です。共有値を揮発性として設定し、オプティマイザが一度に更新されないと想定しないようにします。 thread.

結論:

同期が必要かどうかは、プロセッサ アーキテクチャ、メモリ レイアウト、コンパイラの最適化などの要因によって異なります。一般に、特に読み取りと書き込みの順序が関係する重要なセクションでは、共有マルチバイト値へのアクセスを同期することをお勧めします。

以上がマルチスレッド環境では C 整数の読み取りと書き込みはアトミックですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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