アームシングルコピーアトムシリティ
質問
現在ARMV7コアのARMアーキテクチャマニュアルを透けています。第5章メモリアクセスの原子性については、次のようになります。
単一の原子負荷が単一コピーアトミックストアと重なる場合 重複バイトのいずれかについては、LOADが書き込まれたデータを返します。 書き込みはそのバイトのコヒーレンス順に挿入されました シングルコピーアトミックストアは、ロードはポイントからデータを返す必要があります。 コヒーレンスの順序では、書き込みの中に挿入された書き込み すべての単一コピーアトミックストアによるコヒーレンスオーダー 重複バイト数
ネイティブの英語スピーカーとして、私はこの文を理解するのにわずかに挑戦していることを認めています。
メモリバイトへの書き込みがコヒーレンス順に挿入されていないシナリオはありますので、上記は適用されませんか。そうでない場合は、文を短くして次のように再利用すると言うのを訂正しています。
負荷が発生した場合は、少なくとも1バイトを返します。 書き込み、その後、負荷はポイントから重複するすべてのバイトを返す必要があります。 書き込みがそれらを挿入した場所よりも早くは 重なり合うバイト全てのコヒーレンス順序
はまだ同じ意味を輸送しますか?
解決
ARMv8アームでの文言は、実際には多くの場所であいまいさを削除しようとしていることを確認します(たとえメモリ注文セクションを実質的に読めないようにする)。
一般的な理解(実際にを実装することとは対照的に)の面では、少しのあいまいさは常に傷つくわけではないので、それはを作ることに失敗します「メモリの場所」とは、古いV7マニュアル(DDI0406C.B)がこの場合に読み取られたニッサーです。
次の条件が両方ともTRUEである場合、読み取りまたは書き込み操作は単一コピーアトミックです。
- から来るのは不可能です。
メモリ位置への書き込み操作の数の後、メモリ位置の値は書き込み動作の1つによって書き込まれた値です。メモリ位置の値の一部は、1つの書き込み操作とその値の別の部分から、異なる書き込み操作
同じメモリ位置に読み出し動作と書き込み動作を行うと、読み出し動作で得られた値は次のいずれかのものである。
- 書き込み操作前のメモリ位置の値
- 書き込み操作後のメモリ位置の値。
読み出し動作の値が書き込み動作前のメモリ位置の値と書き込み動作後のメモリ位置の値の値であることは決してない。
だからあなたの理解は正しい - 単一コピーのアトミック操作の定義点はあなたがそれの all のどちらかだけを見ることができます、または none
V7では、(右に解釈している場合)2つの通常シングルコピーの原子店が同時に同じ場所に発生したが、異なるサイズが原子性を保証するものであるため、理論的にはそこにある予期しないバイトの混在を観察することができます - これはV8で取り除かれたようです。