DiningPhilosphers.java
Published in DevCode 2001. Original code and wording are preserved.
//7.9
//February 11, 2004
//Dining Philosphers Problem Using Java Synchronization
import java.net.*;
import java.io.*;
import java.lang.*;
import java.math.*;
import java.awt.*;
import java.util.*;
public class DiningPhilosphers
{
boolean[] C = new boolean [5];
static final int THINKING = 0;
static final int HUNGRY = 1;
static final int EATING = 2;
int[] state;
public DiningPhilosphers (int[] state)
{
this.state = state;
for(int i=0; i < 5; i++)
state[i] = THINKING;
for(int j = 0; j < 5; j++)
C[j] = false;
}
public synchronized int pickUp (int i, int[] state){
state[i] = HUNGRY;
test(i, state);
if (state[i] !=EATING )
{
System.out.println(i + "could NOT Eat");
SleepUtilities.nap();
return state[i];
}
return state[i];
}
public synchronized int putDown (int i, int state[]) {
state[i] = THINKING;
C[i] = false;
C[(i+1)%5] = false;
System.out.println(i + "is now Thinking");
return state[i];
}
private int test (int i, int state[]) {
if((C[i] != true) && (C[(i+1)%5] != true) &&( state[i] == HUNGRY))
{
state[i] = EATING;
C[i] = true;
C[(i+1)%5] = true;
System.out.println(i + "is now Eating");
return state[i];
}
return state[i];
}
}