2

前述の哲学者ディナー問題の導線解法は、サイズ 4 のセフォアを使用し、すべての哲学者が右分岐の前に左分岐を取得しようとすることを示唆しています。http://en.wikipedia.org/wiki/Dining_philosophers_problem#Conductor_solution

また、哲学者は左/右の順序でフォークを拾うことを示唆していますか?

哲学者が左/右の順序でフォークを拾うことが重要なのはなぜですか?

または、すべて同じ順序で (すべて右/左も可能だと思います)?

4

2 に答える 2

1

デッドロックは通常、ロックに順序の問題がある場合に発生します。次に例を示します。

Thread 1: acquire lock1 then lock2
Thread 2: acquire lock2 then lock1

T1 が lock1 を取得し、T2 が lock2 を同時に取得すると、両方がブロックされ、デッドロックが発生します。

たとえば、lock1 は常に lock2 の前に取得する必要があるなど、特定の順序を導入することで、問題を取り除きます。

Thread 1: acquire lock1 then lock2
Thread 2: acquire lock1 then lock2

T1 がロック 1 を取得するとすぐに、T2 は進行できず、ロック 2 を取得できなくなります。ロック 2 は T1 で引き続き使用できます。

左から右への順序を課すことは、同じ目的を達成し、指揮者の役割を簡素化します。

于 2013-03-28T09:45:05.987 に答える
0

まず、すべての哲学者にとって、シーケンスは左/右または右/左でなければならないと言われています。

それはすべて、追加の微妙な仮定に依存します。問題の「指揮者の解決策」では、ウェイターが十分に賢いと仮定すれば、左/右の順序はそれほど重要ではないと思います。ウェイターがテーブル全体の状況を認識している場合、デッドロックが発生しないように「保守的な」方法でフォークを許可できます。これは集中型のソリューションです。固定されたシーケンスは、哲学者がより予測可能な方法で行動するため、指揮者がフォークを許可できるかどうかを決定するのに役立ちます。

于 2013-03-28T08:45:48.570 に答える