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.
-p: number of philosophers
-R: number of seconds to run
© 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.