問題タブ [concurrentdictionary]
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.
.net - .NET-辞書のロックとConcurrentDictionary
型に関する情報が足りなかったConcurrentDictionary
ので、ここで聞いてみようと思いました。
現在、私はを使用してDictionary
、複数のスレッドによって常にアクセスされるすべてのユーザーを保持し(スレッドプールから、正確なスレッド数はありません)、同期アクセスを持っています。
私は最近、.NET 4.0に一連のスレッドセーフなコレクションがあることを知りましたが、それは非常に喜ばしいようです。Dictionary
同期アクセスを使用する通常のオプションと、ConcurrentDictionary
すでにスレッドセーフなオプションのどちらかを選択できるので、「より効率的で管理しやすい」オプションは何でしょうか。
c# - ConcurrentDictionary を Dictionary に変換するにはどうすればよいですか?
Dictionary オブジェクトに設定したい ConcurrentDictionary オブジェクトがあります。
それらの間でのキャストは許可されていません。では、どうすればいいですか?
c# - 非静的クラスの静的オブジェクトへの複数スレッド アクセス
デフォルトでは、非静的メソッドは、複数のスレッドを介してアクセスされる場合、スレッドごとに変数の独自のインスタンスを持っているため、パブリック変数などが含まれていない場合はスレッド セーフになります。
一方、静的メソッドの変数はスレッド間で共有され、デフォルトでは非スレッド セーフになります。
たとえば、静的変数やメソッドをまったく持たないクラスがあるとします。
しかし、このクラスから静的オブジェクトを作成します。
そして、複数のスレッドで objProfile にアクセスします。
問題は、プロファイル クラスのメソッド、AddToCache、RemoveFromCache、および DoSomethingThatShouldBeThreadSafe が、objProfile を介して使用されたときにスレッド セーフになるかどうかです。クラスのインスタンス全体が静的であるため、変数が静的でなくても、それらの変数はスレッド間で共有されますか?
c# - ConcurrentDictionary および互いに素なキーのセット
3 つのスレッドがあります。それらのそれぞれは、独自の辞書キーのセットで動作 (読み取り、書き込み) します。したがって、キーは異なるスレッドに対して相互に排他的です。データの読み取りのみを行う複数のスレッドもあります。
次の 2 つのアプローチのどちらが速度の点でより効率的ですか。
- (ConcurrentDictionary 型の) 単一の辞書を作成する
- これら 3 つのスレッドのそれぞれに対して、(ConcurrentDictionary 型の) 個別の辞書を作成します。
一見すると、ライターの競合がないため、2 番目のアプローチの方が効率的です。ここに落とし穴はありますか?2 つのアプローチの違いが重要でない場合は、最初のアプローチを使用します。
c# - select from Dictionary は値を見つけますが、select from ConcurrentDictionary は値を見つけません
今日、私は ConcurrentDictionary と Dictionary でいくつかのテストを行っていました:
上記のエンティティを使用して、ConcurrentDictionary と Dictionary を作成して入力し、以下のコードを試しました。
最初のものは値を返しますが、2番目のものはそうではありません。何が間違っていますか?
これは、値を追加するために使用されるコードです。
c# - ConcurrentDictionary - 壊れた辞書または悪いコード?
さて、奇妙な小さな問題に直面しており、率直に言って、アイデアがありません。私はこれをそこに捨てて、何か間違ったことを見逃していないか、または ConcurrentDictionary が正しく機能していないかどうかを確認したかったのです。コードは次のとおりです。
(キャッシュは、静的な ConcurrentDictionary キーを含むクラスです)
問題は、 が であることtmp
がありnull
、TryRemove
行が実行されることがありますが、return null;
上記の行は決してヒットしません。それが辞書にreturn null
入れられる唯一のものであり、決して実行されないので、どうしてそうなるでしょうか?null
tmp
null
Cache クラスを含めます (このコードでは SetNames を使用しません):
c# - Where is ConcurrentDictionary in Reactive Extensions .NET 3.5
My questions is simple. After heavy googling I have learned that I can use ConcurrentDictionary in .NET 3.5 projects using Reactive Extensions and System.Threading.dll version from its install directory. First of all there is no System.Threading.dll, there is only System.Reactive.Windows.Threading in Reactive Extensions .NET 3.5 subdirectory. Adding reference to System.Reactive or System.Reactive.Windows.Threading or to any other from the mentioned .NET 3.5 doesn't give me ConcurrentDictionary class nor it gives me System.Collections.Concurrent namespace. I have downloaded older version of Reactive Extensions SDK and I have found what I have been looking for but my question is: does anybody know what happened to the ConcurrentDictionary backport in actual release of Reactive Extensions, does anybody know where it is or why it is missing. I was not able to find a reasonable answer or any answer at all.
c# - ConcurrentDictionary および Clear() 関数。データ損失なしで値をスレッドセーフにエクスポートする
値がリスト ex にエクスポートされ、その辞書がクリアされた後に ConcurrentDictionary をスレッドセーフにするアイデア。エクスポートとクリアの間に他のスレッドがデータを追加できないようにします。
このような: "
" そして、関数 _changedItems.AddOrUpdate を使用して他のスレッドによって追加が行われます
行をクリアする前にスレッドがデータオブジェクトをコレクションに追加すると、ディクショナリからデータを取得してからコンテンツをクリアするまでの間に、新しいデータが失われる可能性があります。
または、ロック内で追加とクリアを行う唯一の方法です。
と
ディクショナリからクリアされたすべてのアイテムを安全に返す Clear 関数が必要です。
-ラリー
visibility - ConcurrentDictionaryと可視性
ConcurrentDictionaryは書き込み時にのみロックされるため、読み取りはロックフリーであることを読みました。
http://blogs.msdn.com/b/pfxteam/archive/2010/01/08/9945809.aspx 辞書の読み取りはロックフリーの方法で実行されます
しかし、可視性についてはどうでしょうか。読み取りがロックフリーの場合、どのようにしてこれを保証するのでしょうか。
c# - 述語による ConcurrentDictionary AddOrUpdate
私は持っていConcurrentDictionary
ます。AddOrUpdate
そのメソッドを使用してアイテムを操作します。
私の質問は:AddOrUpdate
の update パラメータを使用して if ステートメントを含めることは可能ですか? たとえば、 myConcurrentDictionary
には、文字列 Id と DateTime Date プロパティを持つオブジェクトが含まれています。
したい - 指定された Id を持つオブジェクトが存在しない場合は、新しいオブジェクトを追加します - 新しいオブジェクトの日付が既存のものと等しいか大きい場合は更新し、小さい場合は更新します何でもする。
私の例では:
私は変わらなければならない
に