GNU C および GNU C では、64 ビット コンピューター上のどの型が自然にアトミックですか?
C11 以降、または C 11 以降とは異なります。 _Atomic または std::atomic 型を使用してアトミック性を保証しますが、C および C 言語標準自体はアトミック性を保証しません。アトミックな読み取りと書き込み。代わりに、原子性のレベルはコンパイラの実装とターゲット アーキテクチャによって異なります。
x86-64 プロセッサで Linux を実行している 64 ビット コンピューターでは、さまざまなデータ型の自然な原子性は異なります。 GNU C および GNU C コンパイラ (gcc および g ) は、特定の型に対して特定のレベルのアトミック性を提供します。
アトミック タイプ:
-
int: ヘッダー の typedef _Atomic_word int がアトミックであることを示します。
-
__sig_atomic_t: ヘッダー の typedef。アトミックな整数型を定義し、非同期割り込みが存在する場合でもアトミックな読み取りと書き込みを保証します。
非アトミック型:
- int64_t (長いlong)
- uint64_t (符号なし long long)
- double (64 ビット)
- 長い倍精度 (また64 ビット)
追加メモ:
- アトミックとは、アトミックなインクリメント、デクリメント、または複合ではなく、アトミックな読み取りおよび書き込みを指します。
- 特定の型はアトミックであることが保証されていることに注意することが重要です。特定のコンテキスト (たとえば、volatile sig_atomic_t はシグナルに関してアトミックです) では、スレッドに関しては必ずしもアトミックであるとは限りません。
- コンパイラーは、特にアトミック性に関する前提を破る方法でコードを最適化することがあります。言語標準には明示的に記載されていません。
- スレッドセーフな同時アクセスを確保するには、_Atomic またはstd::atomic 型を推奨します。
以上が64 ビット GNU C/C システムではどのデータ型が自然にアトミックですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。