ホームページ >バックエンド開発 >C++ >64 ビット x86-64 システム上で自然にアトミックな動作を示す C および C タイプはどれですか?

64 ビット x86-64 システム上で自然にアトミックな動作を示す C および C タイプはどれですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-14 07:40:11983ブラウズ

Which C and C   Types Exhibit Naturally Atomic Behavior on a 64-Bit x86-64 System?

64 ビット コンピューターではどの C および C 型が自然にアトミックですか?

言語標準とは異なり、GNU C および GNU C コンパイラーは特定のアーキテクチャに基づいてアトミック性を扱います。 C11 と C11 では _Atomic タイプと std::atomic<> が導入されています。

64 ビット Linux コンピューターでのアトミック性の保証

64 ビット Linux 上x86-64 プロセッサを搭載したコンピュータでは、次のタイプには当然アトミックな読み取りがあり、 writes:

  • int
  • _Atomic_word

ただし、これらの型でさえ、言語標準に従って決定的に自動的にアトミックになるわけではないことに注意することが重要です。

原子性を理解する

主に 2 つあります"アトミック" の意味:

  • 信号に関してアトミック: 別の命令の実行中に呼び出されたシグナル ハンドラーが、揮発性の sig_atomic_t 変数の古い値または新しい値のみを参照するようにします。
  • スレッドに関してアトミック: を保証します。オブジェクトに同時にアクセスすると、すべてのスレッドで正しい値が表示されます。これを実現するには、_Atomic 型または std::atomic 型が必要です。

コンパイラの最適化とアトミック性

型がハードウェア レベルで自然にアトミックであるからといって、コンパイラがアクセスするには常にアトミック命令を使用します。最適化により、ターゲット ハードウェア上でアトミックであることがわかっているデータ型であっても、非アトミック アクセスが発生する可能性があります。

たとえば、x86 上の 32 ビット整数からのロードはアトミックですが、コンパイラはアトミックであることが保証されていない 16 ビットの部分的なロードまたはストアを使用します。

結論

要約すると、C または C には、64 ビット コンピューター上で確実に自動的にアトミックとなる型はありません。アトミック アクセスを保証するには、_Atomic または std::atomic タイプを使用するか、ドキュメントに頼って特定のアーキテクチャとコンパイラのアトミック保証を検証することが重要です。

以上が64 ビット x86-64 システム上で自然にアトミックな動作を示す C および C タイプはどれですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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