0

アトミック操作の要件について、証拠に基づいた情報を収集したいだけです。

例(正しくないかもしれません。ほんの一例です)

  1. x86_64 では、エントリ sizeof long に対して書き込みまたは読み取りを行い、long でアラインされている場合、操作は aotmic です。

  2. x86_64 では、gccアトミック プリミティブを使用してバイトの書き込みまたは読み取りを行うと、これらのバイトに対する操作はアトミックのままになります。

受け取って助けてくれることを願っています:)

4

2 に答える 2

3

Professional C++からの引用:

単純なスカラー変数への単純な代入では、通常、同期は必要ありません。たとえば、x86 では、32 ビットにアラインされた値はハードウェア レベルでアトミックに処理され、単一のトランザクションでは明示的な同期は必要ありません。たとえば、ブール値を false に設定してスレッドを停止する場合、同期は必要ありませんが、特定の op に対する ++、-、または op= などの操作には同期が必要です。

これですべての質問に答えられるわけではありませんが、これはあなたが探していたものの一部ですか?

于 2012-04-23T03:03:06.477 に答える
2

チップ レベルの保証を探している場合は、それらのチップのテクニカル マニュアルを参照する必要があります。Intelでは、メモリの順序付けに関する完全な情報が記載されているソフトウェア開発者マニュアルを確認してください。この場合のアトミックの定義には、メモリ順序の保証が含まれます。基本的な保証は「Volume 3: 8.2 Memory Ordering」に記載されており、さらに一部の関数は「アトミック」な方法で動作するものとしてマークされています。

完全な詳細は複雑であり、チップの詳細な理解が必要であることに注意してください。これが、C および C++ がより高いレベルの保証でそれらをラップするようになった理由です。もちろん、それぞれの規格を調べて、その保証を確認することもできます。

于 2012-04-23T08:54:21.587 に答える