User Tools

Site Tools


philosophers

In an alternative solution to the dining philosophers, the philosophers share the following.

int state[];
semaphore mutex;
semaphore block[];

N is the number of philosophers. Each philosopher has a unique number between 0 and N-1 and a philosopher's state state[i] is either THINKING, HUNGRY or EATING.

PHILOSOPHER(int i)
{
   think;
   P(mutex);
   if (state[(i - 1) % N] != EATING && state[(i + 1) % N] != EATING)
   {
      state[i] = EATING;
      V(block[i]);
   }
   else
   {
      state[i] = HUNGRY;
   }
   V(mutex);
   P(block[i]);
   eat;
   P(mutex);
   state[i] = THINKING;
   if (state[(i - 1) % N] == HUNGRY && state[(i - 2) % N] != EATING)
   {
      V(block[(i - 1) % N]);
   }
   if (state[(i + 1) % N] == HUNGRY && state[(i + 2) % N] != EATING)
   {
      V(block[(i + 1) % N]);
   }
   V(mutex);
}
philosophers.txt · Last modified: 2009/04/26 19:33 by franck

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki