問題タブ [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.

0 投票する
1 に答える
3545 参照

c - mmap を使用して int の配列を子プロセスから見えるようにする

私は食事の哲学者の問題に取り組んでおり、スレッドを使用できないため、共有メモリを使用して箸と哲学者の配列をすべての子プロセスから見えるようにする必要があります。mmap を使用しようとしていますが、mmap の使用が正しくなく、この質問のように引数が int ではなく int の配列であるため、修正方法がわかりません。別の関数を使用して共有メモリに作成する必要がありますか?

0 投票する
1 に答える
1314 参照

operating-system - 左利きの哲学者と右利きの哲学者の混合、トリッキーな質問?

補題 1: 左利きの哲学者と右利きの哲学者が混在するテーブルでは、デッドロックは発生しないことがわかっています。私はその証拠に非常に精通しています。

最近、インタビューで次の質問に出くわしました。

円卓に 5 人の哲学者が座っています。二人の哲学者の間にはそれぞれ箸があります。各哲学者は、食べるのに箸が 2 本必要です。左利きと右利きの 2 種類の哲学者がいます。左利きはまず左手で箸を取る。右手はまず右手で箸を取る。5 人の哲学者のうち、少なくとも 1 人は左利きで、少なくとも 1 人は右利きであるとします。正しいのはどれか:

a) 円卓会議での配置哲学者の組み合わせとは無関係に、デッドロックはありません。(私は確かに本当です)

b) すべての哲学者が同時に最初の箸を取ると、デッドロックが発生します。(含意的に、a-->b があり、a が偽である場合、a-->b が真であるという意味で、これは真だと思います。このオプションでは、すべての哲学者が最初の箸を同時に取る方法がないため、全体が発言は事実です。)

専門家なら誰でも助けてくれますが、私の主張は真実ですか?

編集 1: Lemma1 の証明を追加します: (ただし、上記の質問にはいくつかの違いがあります。)

最初に、テーブルの周りのリソース取得のパターンにより、可能な待機サイクルは 1 つだけであることに注意してください。つまり、すべての哲学者が関与するサイクルです。したがって、そのようなデッドロックを想定してください。すべての哲学者は待っている必要があります。したがって、すべての箸を保持する必要があります。私たちのテーブルに左利きの哲学者と右利きの哲学者が混在している場合、反対の利き手の隣接する哲学者のペアが少なくとも 1 組存在する必要があります。まず、左利きの哲学者 (「レニー」) が右利きの哲学者 (「ロジャー」) の左側に座っているとします。すべての箸を持たなければならないので、レニーかロジャーのどちらかがその間にある箸を持つ必要があります。レニーが持っていればそれが「右の箸」なので、左の箸は以前に手に入れていたはずです。このように、レニーは2本の箸を持ち、何も取得するのを待っていない (彼は食べている) ので、デッドロックはありません。ロジャーがそれらの間にある箸を持っている場合、それは彼の「左の箸」であり、したがって彼は以前に右の箸を獲得したに違いありません。左利きの哲学者の左側に座っている右利きの哲学者です。繰り返しますが、デッドロックが発生した場合は、すべての箸を保持する必要があるため、そのうちの 1 つがそれらの間に箸を保持します。これは、もう一方が箸を持っていないことを意味します。なぜなら、それらの間のものが最初に獲得しようとするからです (ロジャーが右に手を伸ばして手に入れたか、レニーが左に手を伸ばして手に入れたかのいずれかであり、もう一方は手を伸ばす前にそれを待っています)。外方向)。n人の哲学者とn本の箸がある場合、すべての箸を持ち、しかし、1 人の哲学者が箸を 0 本持っている場合、n-1 人の哲学者が n 本の箸を持っています。一部の哲学者は、2 本の箸を保持する必要があります。その哲学者は待っていない(彼は食べている)ので、デッドロックはありません。

0 投票する
1 に答える
389 参照

c - 共有メモリ C にセマフォを配置する

フォーク後に複数のプロセスからセマフォが見えるようにしようとしています。これは、共有メモリとセマフォを使用して、一度に 1 人の哲学者だけが箸を持ち上げるようにする食事の哲学者の問題です (最も効率的な方法ではありません。セマフォの配列の方が効率的ですが、それは重要ではありません)。start 内の while ループに到達し、入ったことを出力していますが、どのプロセスも if ステートメントに入っているプロセスはありません。グローバル スコープ: int semId;

Inside my main:

ここで入手可能な完全なコード: http://pastie.org/10054082グローバルで宣言されるべきではないものがありますが、動作するようになるとクリーンアップされます

0 投票する
1 に答える
131 参照

java - 五賢者が一斉に食事をしているのですが、なぜですか?

これはクラスの哲学者です

端末で何が何をしているかを出力することになっていますが、問題は、彼らが 1 人ずつ、または最良のシナリオでは最大 2 人の哲学者を食べなければならないことです。しかし、彼らは一緒に食べます。同期が本来の動作をしていません。問題はどこだ?

0 投票する
1 に答える
1615 参照

algorithm - Chandy/Misra ダイニング哲学者向けソリューション

したがって、このウィキペディアの記事の Chandy/Misra セクションに基づいて、P1 ~ P5 の番号が付けられた 5 人の哲学者がいます。

この引用に基づいて:

リソースをめぐって競合する哲学者のペアごとに、フォークを作成し、それをより低い ID (エージェント Pn の場合は n) を持つ哲学者に渡します。各フォークは、汚れていてもきれいでもかまいません。最初は、すべてのフォークが汚れています

フォークを持った哲学者がリクエスト メッセージを受信すると、フォークが汚れていない場合はフォークを保持しますが、汚れている場合は放棄します。彼がフォークを送る場合、そうする前にフォークをきれいにします。

したがって、すべてのフォークは最初は汚れているという知識を持って、次の引用とその下の画像を検討してください.

Swansons のペアごとに、ID が小さい人にフォークを渡します。

私の質問は、P3 が隣の P2 に 2 つ目のフォークを要求した場合、P2 はフォークを手に取ったばかりなのに、汚れていたために 1 つのフォークを放棄するのでしょうか?

0 投票する
2 に答える
137 参照

java - 食事の哲学者 - 私はすべての人に話しましたが、聞くのは 1 人だけです

私は食事の哲学者問題を実装していて、私自身が問題に直面しました。何が原因なのかわからないため、ここにいます。

私が彼らに去るように言っているのは夕食後です.私は彼らにレポートを作成するように強制したいのです,なぜならそれは彼らの人生の次の段階だからです. 私がそうすると、全員が反応しますが、行動するのは 1 つだけです。

コンソール出力:



これは哲学者クラスです:



ダイニングルーム クラス:

0 投票する
2 に答える
838 参照

java - Javaで哲学者を食べる

今日、私は食事の哲学者の問題を解決しようと決心しました。というわけで以下のコードを書きます。でも、それは正しくないと思うので、どこが悪いのか教えていただけると嬉しいです。私はロックにフォークを使用します(同期ブロックにアクセスしないため、それらを読み取るだけです)、スレッドを拡張するクラスがあり、2つのロックを保持します。

5 番目の哲学者は決して食べず、主に 4 番目と 3 番目の哲学者が食べるため、何かがおかしいと思います。前もって感謝します。