言語標準とは異なり、GNU C および GNU C コンパイラーは特定のアーキテクチャに基づいてアトミック性を扱います。 C11 と C11 では _Atomic タイプと std::atomic<> が導入されています。
64 ビット Linux 上x86-64 プロセッサを搭載したコンピュータでは、次のタイプには当然アトミックな読み取りがあり、 writes:
ただし、これらの型でさえ、言語標準に従って決定的に自動的にアトミックになるわけではないことに注意することが重要です。
主に 2 つあります"アトミック" の意味:
型がハードウェア レベルで自然にアトミックであるからといって、コンパイラがアクセスするには常にアトミック命令を使用します。最適化により、ターゲット ハードウェア上でアトミックであることがわかっているデータ型であっても、非アトミック アクセスが発生する可能性があります。
たとえば、x86 上の 32 ビット整数からのロードはアトミックですが、コンパイラはアトミックであることが保証されていない 16 ビットの部分的なロードまたはストアを使用します。
要約すると、C または C には、64 ビット コンピューター上で確実に自動的にアトミックとなる型はありません。アトミック アクセスを保証するには、_Atomic または std::atomic タイプを使用するか、ドキュメントに頼って特定のアーキテクチャとコンパイラのアトミック保証を検証することが重要です。
以上が64 ビット x86-64 システム上で自然にアトミックな動作を示す C および C タイプはどれですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。