問題タブ [load-link-store-conditional]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - コンペアアンドスワップアトミック操作とロードリンク/ストア条件付き操作
x86プロセッサでは、コンペアアンドスワップアトミック操作とロードリンク/ストア条件付き操作の違いがわかりません。後者は前者より安全ですか?最初のものが2番目のものよりも優れているというのは本当ですか?
assembly - レジスタ幅またはキャッシュ ライン幅による ARM LL/SC 排他アクセス?
ARM で LL/SC を使用して、ロックフリー データ構造ライブラリの次のリリースに取り組んでいます。
LL/SC の私のユースケースでは、LDREX と STREX の間の単一の STR で使用する必要があります。(CAS をエミュレートするために使用するのではなく)。
今、私はコードを書きました、そしてこれはうまくいきます。しかし、私が懸念しているのは、それが常に機能するとは限らない可能性です. LL/SC ターゲットと同じキャッシュ ラインにアクセスすると、LL/SC が壊れるという PowerPC に関する記事を読みました。
したがって、STR ターゲットが LL/SC ターゲットと同じキャッシュ ラインにある場合、私は死んでいると考えています。
現在、LL/SC ターゲットと STR ターゲットは常に異なる malloc() にあるため、それらが直接同じキャッシュ ラインにある可能性はおそらく小さいです (そして、LL/SC ターゲットをパディングして開始することでこれを保証できます)。キャッシュ ライン境界を埋め、そのキャッシュ ラインを埋めます)。
しかし、STR ターゲットがメモリ内の適切な (間違った!) 場所にある場合、誤った共有が発生する可能性があります。
LDREX/STREXのドキュメントを見ると、これは「物理アドレス」の観点から排他的アクセスを説明しています。これは、キャッシュ ライン幅の粒度ではなく、レジスタ幅の粒度を意味します。
それが私の質問です。LDREX/STREX は、レジスタ幅の粒度またはキャッシュ ライン幅の粒度を使用したメモリ アクセスに敏感ですか?