問題タブ [concurrent-programming]
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.
java - IteratorとVectorを使用した不明な同時変更例外java
同時変更例外が発生し続ける
なぜ何かアイデア?
現在の解決策:
design-patterns - 並行プログラミングのパターンですか?
いくつかの OOP デザインが頭に浮かびました。プールと工場のようなものです。
ファクトリは、複数のスレッド間で共有できるリソースを作成します。1 つのリソース エンティティは高価であり、その作成には多くの時間がかかります。リソースは、一度に複数のスレッドで使用できます。
私の特定のケースでは、リソースは SSH 接続です。SSH 接続は 1 つの TCP ソケットを使用します。ただし、1 つの SSH 接続に複数のセッションを含めることができます。各スレッドは、それ自体の新しいセッションを作成します。セッションの作成では、ファクトリを操作する必要はありません。
複数のスレッドが同じリモート ホストと対話しようとする場合があります。
リソースのステータスを定義しました。
init 一部のスレッドが SSH 接続を取得しようとしましたが、存在しません。リソースの作成には長いプロセスがあります。別のスレッドも同じリソースを取得しようとすると、必要なリソースが進行中であることがわかり、2 番目のスレッドは通知を待ちます。
free すべてのセッションが閉じられ、SSH 接続を使用するスレッドはありません
ビジー 少なくとも 1 つのスレッドが SSH 接続を取得しました
閉じられた TCP ソケットが破棄されます
リソースの状態図があります。
-> 初期化 -> ビジー -> フリー -> クローズ
空いている -> 忙しい
OOP パターン、エンタープライズ アプリケーション パターン、並行パターンに関する本を読んでいますが、上記の状況を思い出せません。
SSH は単なる例です。このパターンは、同時作業をサポートする重いリソースに適しています。2 番目のスレッドが作成中のリソースを取得したいが、リソースの 2 番目のインスタンスを作成するのはナンセンスです。
それがパターンなら、彼の名前は何ですか?このデザインはすでにどこかに記載されていると確信しています。
java - Java同期メソッドとブロック
Javaでの複数のスレッドの同期をより完全に理解しようとしています。私は、synchronizedキーワードの使用の背後にある高レベルのアイデアと、それがスレッド間の相互排除をどのように提供するかを理解しています。
唯一のことは、私がオンラインで読んだ教科書の例のほとんどは、同期されたキーワードを削除しても正しく機能することです。これにより、このトピックが必要以上に混乱します。
同期キーワードを含めないと誤った結果が生じる具体的な例を誰かに教えてもらえますか?どんな情報でも大歓迎です。
java - 並行プログラミング:最初にシーケンシャルプログラムを作成してから、スレッドセーフを追加する必要がありますか?
私はいくつかのスレッドを作成しなければならないプロジェクトに取り組んでいます(実際の数はテスター(TA)によって入力されます)。プログラミングだけでなくデザインにも問題があり、呼び出されるすべてのスレッドやエラーの原因となる可能性のあるスレッドに頭を悩ませることはできません。プロジェクトの期限が近づいているので、実際に私を元に戻すのであれば、これに時間を無駄にしたくありませんが、1つのスレッドだけが実行され、すべてが順次実行され、その後で実行されるようにプログラムを作成する必要があるかどうか疑問に思いました戻って、コードのスレッドセーフ部分を追加してみますか?元の2倍の時間がかかりますか?
プロジェクトの説明:注:倫理規定に違反しないように、できるだけ曖昧にするつもりです。申し訳ありません:(
プログラムは、n個のobjectAスレッド、m個のobjectBスレッド、およびr個のobjectCを受け入れる必要があります。
objectBスレッドは、objectAのコードと相互作用します。objectAスレッドはobjectBとobjectCのコードと相互作用しますobjectBとobjectCは直接相互作用しませんが、objectA -exを介して間接的に相互作用します:objectBはobjectAから何かを必要とします。objectAは、objectCを呼び出すことにより、その何かの結果を取得します
私の混乱は主に、この相互作用のすべてがm + nスレッドによって行われ、objectBがobjectAから何かを要求でき、objectAがobjectCがその何かを完了するのを待ってから戻るなど、説明全体にさまざまな制限があるという事実から生じています。 objectBにそれを。また、各objectAスレッドは、objectBからの1つの命令のみを一度に処理できます。
objectA、objectB、object Cが1つだけになるようにコードを記述したかどうかを知りたいのですが、戻って簡単に変更して、これらの1をm、n、rに変更できますか?
申し訳ありませんが、私の説明が少し混乱している場合。
java - Java マルチスレッドの問題
重複の可能性:
Java String.equals と ==
ウサギとカメのレースをシミュレートするプログラムを書いています! getName() を使用して、スレッドが実行しているオブジェクトを確認し、それに基づいてオブジェクトの値をインクリメントしています。これは私のコードです:
問題は、スレッドの名前を正確に検出したと思っても、if ブロック内に入らないことです。PS私はJavaマルチスレッドが初めてです。コードをご覧いただきありがとうございます。
c# - ConcurrentBagを通知可能にするのは安全ですか?
ConcurrentBagを目立つようにする必要があります。それが安全かどうかを知る必要がありますか?クラスのコードは
前もって感謝します。
c - そのような場合の軽量(最も)軽量のGCCメモリバリアは何ですか?
私は次のCコードを持っています:
コードはロックによって保護されていません(他の人はただ読んdata
で)、の更新前に保存されindex
ていることを確認したいと思います。このコードの周りには他の変数のメモリ書き込みと読み取りがありますが、それらは重要ではないので、GCCはそれらを自由に並べ替えることができます(最適化のためにそうすることを願っています)。の順序を保証するだけで十分です。この目標を達成するには、どのように実装する必要がありますか?data[index]
index
data[index]
index
a_write_memory_barrier()
java - キャッシュ内のファイル作成を同期する方法 (ファイルへの書き込みではなく、作成のみ)
アーカイブのように、古いファイルが保存されているリポジトリがあります。
ユーザーは単純な Web アプリケーションを使用してこれらのファイルを取得します。
Web アプリが実行されているサーバーで単純なファイル システム キャッシュを維持しています。
少なくともそれは単なるアイデアでしたが、シンプルに見えました:)
一度に 1 つのスレッドのみがアーカイブから同じファイルをフェッチできるように、そのキャッシュでファイルの作成を同期する必要があります。
そのファイルをたまたま必要とする他のすべてのスレッドは、最初のスレッドがキャッシュへの書き込みを終了するまで待機し、そこからフェッチする必要があります。
最初は File.exists() メソッドを使用しましたが、スレッド (ロック所有者) が空のファイルを作成した直後に true を返すため (リポジトリ ストリームから書き込みを開始できるようにするため)、これは良くありません。
それが正しい方法かどうかはわかりませんが、静的マップ (file_ID を syncDummyObject にマップする) を使用して、現在フェッチされているファイルを追跡しています。
次に、そのsyncDummyObjectでファイルフェッチを同期しようとしました。
これはこれを行う正しい方法ですか?コードは機能していますが、本番環境に置く前に、問題がないことを確認する必要があります。
ファイルを作成し、完了したらキャッシュに転送するステージングディレクトリを使用することを検討しましたが、別の問題が発生する可能性があります...
読みやすくするために、エラー処理のログと無関係な部分を削除しました。
ありがとう!
編集I: ご協力いただきありがとうございます。CHM で putIfAbsent() を使用するという提案が鍵でした。私は最終的にこのようにしました(追加のコメントは大歓迎です):
編集 II:クラス
の他のブランチに CHM 要素の削除を追加しましif
た (必要がない場合でも、要素をマップに配置するようになりました)。
編集 III:
上記の変数のファイル存在のチェックを移動しましたisFileInCache
。
c#-4.0 - Parallel foreach ConcurrentDictionary追加
電話帳のようなエントリがあります:名前+住所。ソースはWebサイトにあり、カウントは1,000レコードを超えています。
質問は:
でどのように使用/実装 ConcurrentDictionary
しParallelForeach
ますか?
私はそれがより良いパフォーマンスをするかどうか尋ねたほうがいいかもしれません:
ConcurrentDictionary
&ParallelForeach
vs
Dictionary
&foreach
名前がキーと重複することは許可されてConcurrentDictionary
いないので、キーが存在しない場合にのみadd()を追加する独自の組み込み関数があることを正しく理解したと思いますTryAdd
。ConcurrentDictionary
そのため、すでに処理されている重複キーの追加を許可しないという問題が発生したため、その時点から、バランスが標準シーケンシャルではなく方向に向かっていることがはっきりとわかりました。Dictionary
では、特定のデータソースから名前とアドレスを追加し、Parallelforeachを介してConcurrentDictionaryにロードするにはどうすればよいですか?
java - オブジェクトを取得するか、オブジェクトが存在しない場合はオブジェクトを作成する(アトミック操作として)concurrentHashMap のスニペット
Javaでは、次のようなことをしたい:
コードのスニペットをマルチスレッド環境で実行できるようになりました。
map
ConcurrentHashMap にすることができます。
しかし、そのロジックをアトミックにするにはどうすればよいでしょうか。
「同期」ブロックのような些細な解決策を私に与えないでください。この問題は、きっぱりときちんと解決できると思います。