問題タブ [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.
c# - ConcurrentDictionary は GetOrAdd の後に値を編集するのはスレッドセーフですか?
コンカレント ディクショナリの GetOrAdd メソッドを使用して値のリストを取得し、その値のリストを参照して編集しています。このようにするのはスレッドセーフですか?
最初の方法で値を追加し、2 番目の方法でリストをクリアします。
c# - ConcurrentDictionnary tryAdd
ConcurrentDictionary
新しいキーペアを使用して追加しようとTryAdd
すると、値が存在するかどうかがチェックされ、存在しない場合は追加されます。値が異なる重複キーを追加する方法はありますか? それとも、それを可能にする代替のスレッドセーフな辞書がありますか?
c# - カスタム POCO で .NET ConcurrentDictionary の AddOrUpdate を使用するにはどうすればよいですか?
プロパティが既存のキー/値以上かどうかを確認するメソッドのfunc
一部を記述する方法がわかりません。ConcurrentDictionary.AddOrUpdate
UpdatedOn
次のPOCOを考えると、.NET を使用ConcurrentDictionary.AddOrUpdate
して辞書内の項目 (存在する場合) を更新するにはどうすればよいですか?
(疑似コード)
私は2 番目のオーバーロードされたメソッド( ) を見てきましたが、メソッドの一部AddOrUpdate(TKey, TValue, Func<TKey, TValue, TValue>)
を実行する方法がわかりません。Func
static - ConcurrentDictionary で値をロックする必要がある場合のベスト プラクティス
Web サービスでオブジェクトの静的リストを作成するための最適なソリューション (パフォーマンスと正確さ) を見つけようとしています。
一部の Web メソッドはこれらのオブジェクトに修正を加え、修正後にオブジェクトの状態を返します。他のメソッドは現在の状態を要求します。
これはお金に関連しているため、すべての操作で正確である必要があります。この Web サービスには、大規模プロジェクトのさまざまな分野からのリクエストが殺到します。
私は ConcurrentDictionary を見てきましたが、他の SO の質問を読んでいるときに、次の答えに出くわしました: https://stackoverflow.com/a/1966462/151625
次の段落は、私が望まないものです。
これを考えてみましょう。店員が一人の店で、列の一番前まで行って、店員に「トイレットペーパーはありますか」と聞いたら、「はい」と答えたら、「わかりました。」いくら必要かわかったらまた連絡します」と言って、列の先頭に戻る頃には、もちろん店は売り切れている可能性があります. このシナリオは、スレッドセーフ コレクションによって防止されません。
したがって、本質的に私は、ConcurrentDictionary 内の値をロックする必要がありますか、それともその目的全体を無効にする必要がありますか? すべき/できる場合、それを行うための最良の方法は何ですか? そうでない場合、どのような代替手段がありますか?
c# - 文書化された/暗黙的に文書化された/文書化されていない動作の保証
ConcurrentDictionary のドキュメントを見ると、次のように書かれています。
複数のスレッドが同時にアクセスできるキーと値のペアのスレッド セーフなコレクションを表します。
これを読むと、ConcurrentDictionary API で任意のメソッドを呼び出すことができ、スレッドセーフになると思います...しかし、これは明示的な実装も含めることを意味していましたが、その保証はありますか?
私の例は、その値が何らかの値である場合に、アトミック操作で ConcurrentDictionary から項目を削除する場合です。
だから私はこれを行うことができます:
ソースコードを調べたところ、その操作はアトミックかつスレッドセーフですが、ConcurrentDictionary API にないという事実は、それを使用すべきではないことを意味します...または、コレクションを使用して実行している可能性があります私がそれを使ってはいけないこと。
さらに一歩進んで、次の拡張メソッドを記述できます。
これは ConcurrentDictionary の Intellisense に表示されます。これは ICollection インターフェイスを実装しており、多くの開発者は何か問題があることさえ知らない可能性があるためです (実際に何か問題があるとしたら?!)。
編集: 「暗黙的に文書化された」とは、ConcurrentDictionary が一連のインターフェイスを実装するということです。ドキュメントには、スレッドセーフであると記載されていますが、そのページにリストされているメソッドのみについては記載されていませんが、インスタンスに対するすべての操作が安全であることを暗示しています。
c# - ConcurrentDictionary へのスレッドセーフな変更
ループConcurrentDictionary
内にaを入力しています:Parallel.ForEach
lock ステートメントを使用せずにスレッドセーフな方法で最後の手順を実行するにはどうすればよいですか?
編集:ItemCollection
スレッドセーフ であると仮定します。