возможность голодания обедающих философов

Мне нужно проверить мой алгоритм решения проблемы обедающего философа, если он гарантирует, что все следующие условия удовлетворены или нет:

  • Нет возможности тупика.
  • Отсутствие возможности голодания.

Для решения проблемы я использую семафор на палочках для еды.

Вот мой код (алгоритм):

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]);
}

Я уверен, что здесь нет возможности тупика, но возможна ли здесь проблема голода? Если да, то как я могу ее решить?

13
задан Charles 25 November 2011 в 22:23
поделиться