Java解哲学家就餐问题
来源:优易学  2011-9-12 12:11:05   【优易学:中国教育考试门户网】   资料下载   IT书店

  哲学家进餐问题是一个多线程运用的经典例子,涉及到线程同步/互斥,临界区访问问题以及一个避免死锁的解决方法。
  有五个哲学家绕着圆桌坐,每个哲学家面前有一盘面,两人之间有一支筷子,这样每个哲学家左右各有一支筷子。
  哲学家有2个状态,思考或者拿起筷子吃饭。如果哲学家拿到一只筷子,不能吃饭,直到拿到2只才能吃饭,并且一次只能拿起身边的一支筷子。一旦拿起便不会放下筷子直到把饭吃完,此时才把这双筷子放回原处。
  如果,很不幸地,每个哲学家拿起他或她左边的筷子,那么就没有人可以吃到饭了。这就会造成死锁了。。这是需要坚决杜绝的,正如操作系统的死锁问题。
  代码如下:
  import java.util.Random;
  public class DiningPhils
  {
  public static void main(String[] args)
  {
    int n = 10;
    if( n < 1)
    {
    System.err.println( "DiningPils <# of philosophers>" );
    System.exit(-1);
    }
    DiningPhils self = new DiningPhils();
    self.init(n);
  }
  public int getCount()
  {
    return n;
  }
  public void setChopstick( int i, boolean v)
  {
    chops[ i ] = v;
  }
  public boolean getChopstick( int i )
  {
    return chops[i];
  }
  private void init( final int N)
  {
    r = new Random();
    n = ( N < 0 || N > maxPhils ) ? maxPhils : N;
    chops = new boolean[n];
    phils = new Philosopher[n];
    initPhils();
    dumpStatus();
  }

[1] [2] [3] [4] [5] 下一页

责任编辑:小草

文章搜索:
 相关文章
热点资讯
资讯快报
热门课程培训