This is an animation of the dining philosophers. Five philosophers represented by circles sit around a bowl of spaghetti. Each thinks for a while gets hungry and wants to eat. Thinking philosophers are outline black hungry philosophers are solid green and eating ones are solid blue. There are five forks alternating with the philosophers around the table. A philosopher must have sole possession of both its left and right forks in order to eat. The forks are shown as gray lines while a philosopher eats.

private void eat() {
   int napping = 1 + (int) random(napEat);
   xa.color("phil"+id
Color.blue);                 // animation
   xa.fill("phil"+id
xa.SOLID);                    // animation
   nap(napping);
}

public void run() {
   while (true) {
      think();
      xa.color("phil"+id
Color.green);             // animation
      xa.fill("phil"+id
xa.SOLID);                 // animation
      ds.takeForks(id);
      eat();
      ds.putForks(id);
      xa.fill("phil"+id
xa.OUTLINE);               // animation
      xa.color("phil"+id
Color.black);             // animation
   }
}

public void takeForks(int i) {
   P(mutex);
   state[i] = HUNGRY;
   test(i);
   V(mutex);
   P(self[i]);
   xa.color("fork"+i
Color.gray);                  // animation
   xa.color("fork"+right(i)
Color.gray);           // animation
}

public void putForks(int i) {
   P(mutex);
   state[i] = THINKING;
   xa.color("fork"+i
Color.white);                 // animation
   xa.color("fork"+right(i)
Color.white);          // animation
   test(left(i));
   test(right(i));
   V(mutex);
}
At the bottom of the animation window is a button and text field showing the default values of some of the command line arguments. Alter these as needed and click the button. To start the animation push the ``Start'' button after checking the command line arguments text field and clicking that button. An applet appears here if you have a Java-enabled browser.

© 1998 Stephen J. Hartley

Permission is granted to copy and distribute this material for educational purposes only, provided that the following credit line is included: "Concurrent Programming using Java, Copyright 1997 Stephen J. Hartley." Permission is granted to alter and distribute this material provided that the following credit line is included: "Adapted from Concurrent Programming using Java, Copyright 1997 Stephen J. Hartley.