問題タブ [mutual-exclusion]
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 - 重要な領域を理解する
クリティカル リージョン、エントリ プロトコル、およびエグジット プロトコルに関するいくつかの例をオンラインで読んでいましたが、理解するのに苦労しました。 http://pages.cs.wisc.edu/~dusseau/Classes/CS537-S01/SampleQuizzes/sol2.html
この例の入口プロトコル、出口プロトコル、および重要な領域は何ですか? 臨界領域については、相互排除、飢餓、またはデッドロックになりますか?
javascript - JavaScript または jQuery のクリティカル セクション
特定の Ajax イベントが非同期的にトリガーされる Web ページがあります。この Ajax セクションは、1 回または複数回呼び出すことができます。このイベントがトリガーされる回数やタイミングを制御することはできません。
また、その Ajax セクションには、クリティカル セクションとして実行する必要がある特定のコードがあります。つまり、実行中は、そのコードの他のコピーを実行してはなりません。
擬似コードは次のとおりです。
- JavaScript または jQuery コードを実行する
- Ajax であるクリティカル セクションを入力します (特定のプロセスが応答コールバックを待機している場合、このプロセスが完了するまで、このセクションには再度入力しないでください)。
- より多くの JavaScript または jQuery コードを実行する
私の質問は、上記の方法でステップ 2 を実行するにはどうすればよいですか? JavaScript または jQuery を使用して相互排除セクションを作成/保証するにはどうすればよいですか?
理論 (セマフォ、ロックなど) は理解していますが、JavaScript や jQuery を使用してソリューションを実装することはできませんでした。
編集
クリティカル セクションに入るためにブール変数を提案している場合、これは機能しません。以下の行でその理由を説明します。
クリティカル セクションのコードは次のようになります (ブール変数の提案を使用)。
これは、ブール変数を使用して提案されたロック セクションのコードです。これは、以下に示すようには機能しません。
ユーザーが下にスクロールします (関連付けに基づいて、
jQuery(window).on('scroll', load_data_from_database);
複数のスクロール イベントがトリガーされます。2 つのスクロール イベントがほぼ同時にトリガーされたとします。
load_data_from_database
どちらも関数を呼び出しますwindow.lock
最初のイベントは、偽かどうかをチェックします(答えは真なので、ステートメントが正しい場合)window.lock
2 番目のイベントは、偽かどうかをチェックします(答えは真なので、ステートメントが正しい場合)。最初のイベントが if ステートメントに入る
2 番目のイベントが if ステートメントに入る
最初のステートメントはtrue
window.lock
に設定されます2 番目のステートメントはtrue
window.lock
に設定されます最初のステートメントは Ajax クリティカル セクションを実行します
2 番目のステートメントは、Ajax クリティカル セクションを実行します。
どちらもコードを終了します
お気づきのように、両方のイベントがほぼ同時にトリガーされ、両方ともクリティカル セクションに入ります。したがって、ロックはできません。
database - 分散相互排除:同人結成
Quorumの概念に基づく分散型相互排除アルゴリズムを研究しています。
引用: Coterie C は集合の集合として定義され、各集合 g ∈ C は定足数と呼ばれます。
次のプロパティは、グループ内の定足数に適用されます。
1) 交差特性: クォーラム g, h ∈ C ごとに、g ∩ h= ∅. たとえば、セット {1,2,3}、{2,5,7}、および {5,7,9} は、最初と 3 番目のセットに共通の要素がないため、グループ内の定足数になることはできません。
2) 最小性: g ⊇ h となる集団 C には定足数 g, h が存在しない。たとえば、セット {1,2,3} と {1,3} は、最初のセットが 2 番目のセットのスーパーセットであるため、コテリーの定足数になることはできません。
分散システム内の一連のノードが与えられた場合、そのようなノードからそのようなコテリまたはクォーラムのセットがどのように形成されるかを知りたいですか? これを行うためのアルゴリズムまたは手法は何ですか?
更新: 問題を言い換えると、「「N」個のノードが与えられた場合、そのうちの 2 つが共通の「J」個のノードを持つように「K」個の定足数を形成する最良の方法は何ですか?
process - proctype "-end-" で未到達のスピン
私はスピンモデルのチェックにかなり慣れていないので、このエラーの意味を知りたいと思っていました:
ここに私のコードがあります:
実際に終了する必要はありません。これは、2 つのプロセスが一緒にクリティカル セクションにないかどうかをチェックする相互排除プログラムです。エラーはプログラムが終了しないことを意味しますか? ありがとう!
multithreading - 食の哲学者のスレッド。箸を置く順番
哲学者向けのスレッドを作成していました。擬似コードは次のとおりです。
直感的には、箸を離す順番は関係ないと思います。では、左の箸を先に置く代わりに、右の箸を先に置いてもいいですか?これによりエラーが発生しますか?私はそうは思わない。これがデッドロックを引き起こす場合、どのように?そうでない場合は、最初に残すことをお勧めします。なぜですか?
ありがとうございました!