次のすべてが満たされるかどうかが保証される場合は、食事する哲学者の問題を解決するアルゴリズムを確認する必要があります。
- デッドロックの可能性はありません。
- 飢餓の可能性はありません。
問題を解決するために箸のセマフォを使用しています。
これが私のコード(アルゴリズム)です:
while(true)
{
// He is Hungry
pickup_chopsticks(i);
// He is Eating...
drop_chopsticks(i);
// He is thinking
}
// ...
void pickup_chopsticks(int i)
{
if(i % 2 == 0) /* Even number: Left, then right */
{
semaphore_wait(chopstick[(i+1) % NUM_PHILOSOPHERS]);
semaphore_wait(chopstick[i]);
}
else /* Odd number: Right, then left */
{
semaphore_wait(chopstick[i]);
semaphore_wait(chopstick[(i+1) % NUM_PHILOSOPHERS]);
}
}
void drop_chopsticks(int i)
{
semaphore_signal(chopstick[i]);
semaphore_signal(chopstick[(i+1) % NUM_PHILOSOPHERS]);
}
ここでデッドロックの可能性はないと確信していますが、ここで飢餓の問題が発生する可能性はありますか?はいの場合、どうすれば解決できますか?