問題タブ [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.
deadlock - 同時処理 - ピーターソンズ アルゴリズム
なじみのない方のために説明すると、プロセス調整に使用される Peterson のアルゴリズムは次のとおりです。
私の質問は、このアルゴリズムがデッドロックを引き起こす可能性があるかどうかです。
c# - 辞書をConcurrentDictionaryにリファクタリングする
コードをマルチ読み取り可能にしたいので、辞書をConcurrentDictionaryに変更する必要があります。ConcurrentDictionaryについて読み、いくつかの例を確認しましたが、それでもこれを理解する必要があります。
これが元のコードです(シングルスレッドの場合)
これが私が思いついたものです:
これが正しいかどうかはわかりません。特に、IsEmptyチェックは、チェックとパーツまたはパーツ_tasks
の間で初期化されている可能性があるため、スレッドセーフではないと確信しています。このチェックを手動でロックする必要がありますか?ダブルロック(ヌルチェック>ロック>ヌルチェック)が必要ですか?IsEmpty
&& ...
return _tasks
c# - 同じストリームで複数の非同期読み取り/書き込み操作を開始すると、データが破損する可能性がありますか?
非同期 I/O を使用しているのは、呼び出しスレッドをブロックせず、舞台裏でスレッド処理を行うためです。同じ Stream で BeginWrite() のような複数の非同期操作を呼び出す場合、データ バッファーの内容が混在することを心配する必要がありますか?
3つのバッファを送信したいとしましょう:
バッファが間違った順序で送信されてもかまわないので、
大丈夫ですが、バッファの内容が完全に混ざっている可能性はありますか?
PS: 誰かがすでに何らかの形でこれを尋ねていると 100% 確信しています...
c++ - WaitForMultipleObjectsがC ++に失敗する
現在、複数のプログラムをグループで一度に実行し、他のプログラムを単独で実行するプログラムを作成しています。
if( WAIT_FAILED == WaitForMultipleObjects(numberOfProgramsRan, &information[i].hProcess, TRUE, INFINITE) ) {
wcerr << L"Failure waiting for process" << endl;
}
numberOfProgramsRan
ループで実行したプログラムの数です。
作成プロセスからのプロセス情報を保持してい&information[i]
ますvector
forループでプロセスを作成すると、次のプロセスを実行する前に、作成中のプロセスが2つ以下の場合(実行するために2つのプログラムが渡される場合)、プログラムは待機します。2 つ以上のプロセスを作成する (またはベクターで 2 つ以上のプログラムを渡す)WaitForMultipleObjects
と、失敗します。
私の問題をさらに説明する必要がある場合は、お知らせください。
ご協力いただきありがとうございます
python - スタックレス Python - for ループでの再帰?
私はプログラミングを始めたばかりで、Python を使って数か月になります。私は Stackless で動作する概念を取得しようとしていますが、方法がわかりません (ただし、Stackless で動作する他のテスト スクリプトを作成しました)。
Anywho、煮詰めた例として、リストを実行し、同じ関数を再帰的に呼び出すことによって、リストのすべての順列 (編集: n 次元デカルト積) を見つける次のコードを検討してください。
これにより、次の結果が得られます。
これまでのところ、スタックレスと再帰で見つけた唯一の例は、関数がすべて完了した後に関数の最後に情報を送信しているようです。上記で必要となるように、for ループの途中では使用しないでください。
一体どうやってこれを行うのでしょうか?これを再帰関数ではなくタスクレットで実行するスクリプトにするにはどうすればよいでしょうか? (このバージョンは私が思いつく最高のものですが、どのように配置しても失敗します。これは多くの試みの 1 つです。この時点でスパゲッティを壁に投げつけたほうがよいかもしれません。)
バウンスバック関数なしでそれを行う方法のためのボーナス e-cookie - 1 つのタスクレットを使用せずに、1 つのタスクレットに複数回情報を渡す方法をまだ見つけることができませんでした。
御時間ありがとうございます!
java - Java RMI:同時実行のサポート
私はP2Pアーキテクチャを備えたマルチプレイヤーカードゲームを開発しています。それは私の決定ではありません。プロジェクトは私の大学の分散システムコースの教授から委託されました。
教授が課すもう1つの制約は、JavaRMIテクノロジーを使用してプレーヤー間の通信レイヤーを実装することです。
Java RMIが「すぐに」並行性を管理するかどうか、つまり、リモートオブジェクトでメソッドを呼び出すと、オブジェクトが自動的に「ロック」され、同じメソッドを同時に呼び出すことができるオブジェクトがないかどうかがわかります。
メソッドを同期済みとして宣言するのは良い解決策でしょうか?
ありがとう
java - 指定された Runnable で実行されるすべてのスレッドを取得します
複数のスレッドで使用される Runnable が 1 つあります。
で作成されたすべてのスレッドを取得するにはどうすればよいmyRunnable
ですか?
(もちろん、例は単純化されてmyRunnable
います。異なるクラスのいくつかの場所で新しいスレッドを作成します。)
ユースケース (要求に応じて):MyWorkerOfMyPage
ページにバインドされた遅延ワーカーです。ユーザーがこのページを離れた場合 (たとえば、別のページに移動した場合)、属するすべてのスレッドMyWorkerOfMyPage
は、その結果が不要になるため、不適切に強制終了する必要があります。
java - JVM でのスレッド実装の操作
最近は、並行オブジェクトのマルチコアへの展開に取り組んでいます。サンプルでは、仕様にブロッキングBlockingQueue.take()
と記載されているメソッドを使用しています。これは、メソッドが、他の並行タスクに再利用できるように、囲んでいるスレッドのリソースを解放しないことを意味します。これは、JVM インスタンス内のライブ スレッドの総数が制限されているため便利です。また、アプリケーションが何千ものライブ スレッドを必要とする場合、中断されたスレッドを再利用できることが不可欠です。一方、JVM は、アプリケーション レベルのスレッドから Java の OS レベルのスレッドへの 1:1 マッピングを使用します。つまり、各 Java Thread インスタンスは、基盤となる OS レベルのスレッドになります。
java.util.concurrency
現在のソリューションは、Java 1.5+ に基づいています。それでも、多数に拡張できるワーカー スレッドが必要です。今、私は次の答えを見つけることに興味があります:
java.lang.Thread
独自の Thread 実装をプラグインできるように、JVMの実装を置き換える方法はありますか?- これは、JVM のスレッド実装の C++ セクションを微調整して再コンパイルすることによってのみ可能ですか?
- Java の古典的なスレッドを置き換える方法を提供するライブラリはありますか?
- 繰り返しますが、同じ行に、Javaの一部のスレッドをOS レベルの1 つのスレッドのみにマップする方法をガイドするライブラリまたは方法はありますか?
また、これがJVMのさまざまな実装について議論しているのを見つけましたが、それらが役立つかどうかはわかりません.
事前にコメントやアイデアをお寄せいただきありがとうございます。
c++ - 条件変数を非同期的に待機するasioをブーストします
boost :: asioの条件変数に対して非同期待機(読み取り:非ブロッキング)を実行することは可能ですか?直接サポートされていない場合は、実装に関するヒントをいただければ幸いです。
タイマーを実装して数ミリ秒ごとにウェイクアップを起動することはできますが、これは非常に劣ったアプローチであり、条件変数の同期が実装/文書化されていないことは信じられません。
c# - リストのスレッドセーフライターは 1 つ、列挙子は使用しない
この質問に関係のないバグを探していくつかのデータベースList<T>
コードを調べているときに、いくつかの場所で不適切に使用されていることに気付きました。具体的には:
List
as リーダーに同時にアクセスしている多くのスレッドがありましたが、 の代わりにへのインデックスを使用していました。list
enumerators
- への単一のライターがありました
list
。 - 同期はゼロで、リーダーとライターは
list
同時に にアクセスしていましたが、コード構造のため、を実行したメソッドが返されるまで、最後の要素にアクセスすることはありませんでした。Add()
- から削除された要素はありません
list
。
C#のドキュメントによると、これはスレッド セーフではありません。それでも失敗したことはありません。の特定の実装のためにList
(内部的には、スペースが不足したときに再割り当てする配列であると想定しています)、1-writer 0-enumerator n-reader add-only シナリオが誤ってスレッドセーフになっているのではないかと思っています。または、現在の.NET4実装でこれが爆発する可能性が低いシナリオはありますか?
編集:いくつかの返信を読むのを忘れた重要な詳細。リーダーは、List
とその内容を読み取り専用として扱います。