Мне нужно проверить мой алгоритм решения проблемы обеденного философа, если он гарантирует, что все из следующего удовлетворены или нет:
- Отсутствие возможности блокировки.
- Отсутствие возможности голодания.
Я использую semaphore в палочках для решения проблемы.
Вот мой код (алгоритм):
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]);
}
Я уверен, что здесь нет возможности зайти в тупик, но есть ли здесь проблема голодания? Если да, то как я могу его решить?