問題タブ [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.

0 投票する
2 に答える
5430 参照

c++ - コンペアアンドスワップアトミック操作とロードリンク/ストア条件付き操作

x86プロセッサでは、コンペアアンドスワップアトミック操作とロードリンク/ストア条件付き操作の違いがわかりません。後者は前者より安全ですか?最初のものが2番目のものよりも優れているというのは本当ですか?

0 投票する
2 に答える
2325 参照

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 は、レジスタ幅の粒度またはキャッシュ ライン幅の粒度を使用したメモリ アクセスに敏感ですか?