問題タブ [dining-philosopher]
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.
algorithm - 食の哲学者 : Chandy-Misra アプローチ : どうやってデッドロックを回避するのか?
私はそれを試していますが、質問:ウィキでは、そのアルゴリズムの3番目のポイントは次のように述べています:
フォークを持った哲学者がリクエスト メッセージを受信すると、フォークが汚れていない場合はフォークを保持しますが、汚れている場合は放棄します。フォークを送る場合は、そうする前にフォークをきれいにします
これがデッドロックにつながらない理由を理解しようとしていますか? ある哲学者が 1 つのクリーンなフォークを持っていて、隣のダイナー/哲学者から別のクリーンなフォークを取得するのを待っている場合、その人も同様にフォークを待っている場合、これは累積してデッドロックになりますか? ある哲学者が常に他の哲学者からのフォークを待っている?
ps:私はスレッドと並行性に不慣れで、これを学習プロジェクトとして取り上げました。
編集:フォークが与えられる実際の場所、これを投稿して、フォークを変更可能にするかどうかを尋ねます。pLeft と pRight は左右の哲学者であり、fLeft と fRight は左右のフォークです。
同期する場所がわかりませんが、それでも同期が必要だと感じています。たとえば、2 人のダイナーが 1 人目と 3 人目が 2 人目の哲学者にフォークを頼んだとします。
concurrency - 食の哲学者の実例?
Producer/Consumer と Reader/Writer が思いつきやすいですが、食の哲学者はどうでしょうか。N 個のプロセスと N 個のリソースがリング トポロジー上に配置され、相互にインターリーブされるのはどのような状況ですか? M 個のリソースをめぐって競合する N 個のプロセスを考えることができますが、この場合、各プロセスは任意の 2 つのリソースを使用する可能性があります。
wikiによると、Dijkstra はこれを使用して、テープ ドライブの周辺機器をめぐって競合するコンピューターをシミュレートしました。このシナリオは現代にも存在しますか?
java - 2 つの同期メソッドを呼び出すとデッドロックする
上記のコードは、本「7 週間で 7 つの同時実行モデル」からのものです。この本によると、同期されたメソッド updateProgress が別のロックを取得する可能性のあるエイリアン メソッド [onProgress] を呼び出すため、上記のコードにはデッドロックが発生する可能性があります。正しい順序なしに 2 つのロックを取得するため、デッドロックが発生する可能性があります。
上記のシナリオでデッドロックがどのように発生するかを説明できる人はいますか?
前もって感謝します。
java - Netbeans、赤いテキストだがエラーなし
ダイニングの哲学者への解決策を実装しようとしています。私がそれを正しく行っているかどうかはわかりません。プログラムはクラッシュしていませんが、出力に赤いテキストが表示されますが、エラー コードはありません。
エラーの例:
at (package_name).Phil.getrightFork(Phil.java:70) 70 行目と 46 行目 (getrightFork を呼び出す行) の間の代替エラー
すでに getrightFork を getleftFork に交換していますが、常に rightFork がエラーとして選択されます。
私が使用しているコードは次のとおりです。カスタムセマフォ:
主要:
フィルクラス:
c - ダイニング哲学者のアルゴリズムで複数のスレッドに情報を渡す
私は複数のスレッドを作成し、食事の哲学者の問題のために各スレッドに異なる値を渡そうとしています。しかし、私はこのエラーが発生しています:
これが私のコードです: