問題タブ [concurrent-collections]

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

java - ConcurrentSkipListSet と置換 remove(key)

私は ConcurrentSkipListSet を使用しています。これには 20 個のキーが入ります。

これらのキーを継続的に交換したい。ただし、 ConcurrentSkipListSet にはアトミックな置換機能がないようです。

これは私が今使っているものです:

この操作全体の目標は、リストをそのままの状態で保持し、置換によってのみ更新することです。updateSet は 1 ミリ秒あたり約 100 回呼び出されます。

ここで、私の質問は次のとおりです。要素自体が以前に存在していた場合 (後に存在していない場合)、remove は true を返しますか、それとも呼び出しが実際に削除の原因であった場合にのみメソッドは true を返しますか? つまり、複数のスレッドがまったく同じキーに対して同時に remove を呼び出した場合、それらは /all/ が true を返すのでしょうか、それとも 1 つだけが true を返すのでしょうか?

0 投票する
3 に答える
6869 参照

c# - Thread.Sleep なしで CPU を消費しすぎる同時コレクション

または、スレッドを使用して CPU の半分以上を使い果たすことなくアイテムを自由にデキューできるようにするには、BlockingCollectionどちらの正しい使用法でしょうか?ConcurrentQueue

2 つのスレッドを使用していくつかのテストを実行していましたが、少なくとも 50 ~ 100 ミリ秒の Thread.Sleep がない限り、常に CPU の少なくとも 50% を使用していました。

以下は架空の例です。

上記の例では、CPUが爆発しないようにthread.sleepを設定する必要があります。

注: IsEmpty チェックの while なしでも試してみましたが、結果は同じでした。

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

c# - ConcurrentDictionaryは、静的キャッシュに使用できるほどスレッドセーフですか?

基本的に、私が次のことをしたい場合:

これにより、sをあちこちで使用することを回避できますlockか?

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

c# - AutoResetEvent プロセス?

イベントをデキューしたら、イベントを false に設定する必要がありますか?それとも、イベントが戻ってきたとき、_queueNotifier.WaitOne()または正確にどのように機能するかによって、それ自体で false に戻りますか?

代わりに以下の例のようにインナー while を使用する必要がありますか、それとも両方の方法で問題ありませんか。

0 投票する
4 に答える
13471 参照

c# - .NET 4.0 で並行コレクションを並べ替える方法

.NET 4.0 で並行コレクションを並べ替える方法 たとえば、ConcurrentBag コレクションを作成しました。その中の要素をどのように並べ替えることができますか?

0 投票する
4 に答える
101523 参照

c# - ConcurrentDictionaryAddOrUpdateの更新部分に何を追加するか

ConcurrentDictionaryを使用するために、Dictionaryを使用してコードを書き直そうとしています。いくつかの例を確認しましたが、AddOrUpdate関数の実装にまだ問題があります。これは元のコードです:

更新部分に何を追加すればよいかわかりません。

任意のポインタをいただければ幸いです。

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

c# - LinqステートメントでConcurrentQueueを使用する

ConcurrentQueueがある場合、Linqステートメントでそれを使用するための好ましい方法はありますか?すべてのアイテムをシーケンスとしてデキューするメソッドはなく、列挙子はアイテムを削除しません。

バッチ消費を行っています。つまり、キューが空になるまで処理して、さらにアイテムがキューに入れられるまでブロックするのではなく、定期的にキューを処理して空にします。BlockingCollectionは、最後のアイテムに到達したときにブロックされるため、機能しないようです。そのスレッドに、他のキューをクリアするなど、他の処理を実行させたいと思います。

今のところ、私はヘルパーメソッドを作成しました

より良い方法はありますか、それとも私はそれを正しくやっていますか?

0 投票する
3 に答える
9942 参照

.net - ConcurrentListがないのはなぜですか

新しい名前空間System.Collections.Concurrentには、他のクラスの中でも、ディクショナリ、キュー、およびスタックの同時コレクションが含まれています。ConcurrentListがないのはなぜですか?

アップデート

現在のシナリオを説明する新しい質問を投稿しました。私は、元の質問の全体的な意味を変えるよりも、それを好みました。新しい質問へのリンクは次のとおりです。

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

java - ConcurrentNavigableMap、一貫性の低い反復子の解釈

ConcurrentNavigableMapのJavaDoc では、次の点について少し混乱しています。

ビューのイテレータは、ConcurrentModificationException を決してスローしない「弱い一貫性のある」イテレータであり、イテレータの構築時に存在していた要素をトラバースすることを保証し、構築後の変更を反映する場合があります (ただし保証はされません)。

ConcurrentSkipListMap のようなインターフェースの実装では、言葉遣いは同じようです。

これはどういう意味ですか、矛盾しているように見えます-構築時に存在する要素をトラバースすることを保証できるか、または構築後の変更を反映する可能性がありますか??

更新: 基本的に、ConcurrentSkipListMap のような ConcurrentNavigableMaps でイテレータを作成すると、マップの「スナップショット」ビューが作成されるかどうかを知りたいです。

0 投票する
4 に答える
9528 参照

java - ConcurrentHashMap スレッドセーフ内で BigDecimal を更新する方法

一連のジャーナルエントリを取得して合計を計算するアプリケーションを作成しています。

以下の方法は、メソッドを呼び出す複数のスレッドがある場合、スレッド/同時実行セーフaddToSum()です。各呼び出しが合計を適切に更新するようにしたいと考えています。

安全でない場合は、スレッドの安全性を確保するために何をしなければならないかを説明してください。

synchronizeget/put が必要ですか、それとももっと良い方法がありますか?

本当にありがとう!

アップデート:

答えてくれてありがとう、私はすでに上記のコードがスレッドセーフではないことを理解しています。

AtomicReferenceの代わりにを提案してくれた Vint に感謝しsynchronizeます。以前は整数の合計を保持しAtomicIntegerていましたが、BigDecimal にそのようなものがあるかどうか疑問に思っていました。

両者の長所と短所に関する決定的な結論はありますか?