問題タブ [compare-and-swap]

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 投票する
3 に答える
4965 参照

cuda - CUDAで条件付きの複数の変数にatomicCASを使用する方法

最近、プログラミングで単純な概念に遭遇しましたが、それを cuda に実装しようとすると行き詰まりました。何千もの要素があり、それらの間で最も近いペアを見つけたいとします。私atomicMINはグローバルメモリで使用します(縮小したくないと仮定します)ので、各スレッドによって計算された距離がグローバル変数に格納されている距離よりも小さい場合、atomicCAS はそれをより小さい値に置き換えます。たとえば、私はグローバル変数を持っていますfloat gbl_min_dist

これを行うには、次のコードを使用します。

ここで、互いに接近していて、が古い最小距離をそれらの 2 つのポイントによって計算された距離に正常に置き換えた2 つのポイントのインデックスを保存したいとします。atomicMINつまり、グローバル変数で距離が正常にスワップされた場合にのみ、現在距離が小さい2つのポイントのインデックスのみを保存したいということです

したがって、ここで、スレッドが を実行するときに、atomicMIN比較対象のスレッドによって提案された値が でスワップされるgbl_min_dist場合、p1、p2 もスレッドからの値とスワップする必要があります。がスワップされていない場合、gbl_min_distポイントを保存したくありません。これにより、間違ったポイントが得られますが、最小距離は正しくなります。

atomicCASスワップが行われたかどうかを確認する戻り値はありますか?

内でこれを実装する方法についてのアイデアはありatomicMINますか?

前もって感謝します

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

atomic - CAS (アトミック) 操作が同期または揮発性操作よりも速いのはなぜですか

私が理解していることから、同期されたキーワードはローカルスレッドキャッシュをメインメモリと同期します。volatile キーワードは、基本的にアクセスのたびに常にメイン メモリから変数を読み取ります。もちろん、メイン メモリへのアクセスはローカル スレッド キャッシュよりもはるかにコストがかかるため、これらの操作にはコストがかかります。ただし、CAS 操作は低レベルのハードウェア操作を使用しますが、それでもメイン メモリにアクセスする必要があります。では、CAS 操作はどのように高速化されるのでしょうか?

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

java - BST 内の参照をアトミックに更新するための Java compareAndSet

二分木で、親の左の子を新しいノードにアトミックに置き換えようとしています。以下のメソッドでpnode.leftは、 は を指してnodeおり、 に変更しようとしていreplaceNodeます。

In line1 はchildPtrIn line2を指している In line3は In line3 を指しており、 to から toへアトミックに変更されています。pnode.left
oldChildPtrpnode.left
childPtrpnode.leftreplaceNode

でもpnode.left変わらない。これがJavaでの仕組みであることを理解しています。pnode.leftしかし、このコードをアトミ​​ックに に置き換えるにはどうすればよいでしょうかreplaceNode

0 投票する
0 に答える
197 参照

mips - 32 ビット mips cmpxchg(cas) は 8 バイトをサポートしていますか?

みんな。ABAの問題を回避するために、ダブルワードを使用して32ビットミップでプログラムを書いています。しかし、32 ビット mips は Linux カーネル ソース コードで 8 バイトをサポートしていないようです。もしそうなら、8 バイト拡張子を知っている人はいますか? ABA の問題を回避する他の方法はありますか?

0 投票する
1 に答える
2495 参照

multithreading - C++11 std::compare_exchange_strong は、null ポインターと比較するとコンパイルされません

並列 avl ツリーに取り組んでいて、問題が発生しました。この問題を引き起こす関数は次のとおりです。

parent->leftタイプがあり、現在の値が null の場合にatomic<Node*>そのポインターを設定したい。nodeコンパイラはエラーを訴えます

これが有効なコードではないのはなぜですか?