⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 哲学家进餐问题.txt

📁 学家进餐问题也是一个经典的同步问题
💻 TXT
字号:
哲学家进餐问题也是一个经典的同步问题,它是由Dijkstra提出并解决的。哲学家进餐问题是这样的:5个哲学家以思考、吃饭交替进行的方式生活,他们共享一张周围有5把椅子的圆桌,每人一把椅子,在桌子上摆有5个饭碗和5只筷子。当一个哲学家思考时,他不与邻座同事发生联系。当一哲学家饿了,他就试图拿起他左右两边的筷子吃饭。显然,他不能拿起已抓在他的邻座手中的筷子,于是,他可能只拿到一只甚至一只筷子也拿不到。当一个饥饿的哲学家得到了两只筷子,他就可以吃饭。当他用饭毕,就放下筷子并再次开始思考。5个哲学家共享5支筷子,最多只能不相邻的两个哲学家同时就餐请问:是否有死锁的可能?
在多道程序设计环境下,进程同步问题十分重要,其中“哲学家进餐问题”是较有代表性的。通过对该问题的研究学习和实践,可以帮助我们更好的理解和掌握临界资源、进程同步的概念和实现方法。

正好手头有答案,前两天刚做的,但是………… 
我是用JAVA做的:P 



public class kuai { 
String name; 

boolean Enable = true; 

public kuai(String name) { 
this.name = name; 
} 

public synchronized void pickup(){ 
try { 
while(Enable==false){ 
this.wait(); 
} 
this.Enable =false; 
} 
catch (Exception e) { 

} 

} 

public synchronized void putdown() { 
this.Enable =true; 
this.notifyAll(); 
} 

public static void main(String args[]) { 
kuai k1 = new kuai("筷子1号"); 
kuai k2 = new kuai("筷子2号"); 
kuai k3 = new kuai("筷子3号"); 
kuai k4 = new kuai("筷子4号"); 
kuai k5 = new kuai("筷子5号"); 

People p1 = new People("老大", k1, k2); 
People p2 = new People("老二", k2, k3); 
People p3 = new People("老三", k3, k4); 
People p4 = new People("老四", k4, k5); 
People p5 = new People("老幺", k5, k1); 

p1.start(); 
p2.start(); 
p3.start(); 
p4.start(); 
p5.start(); 
} 
} 

class People extends Thread { 
String name; 

kuai left; 

kuai right; 

public People(String name, kuai l, kuai r) { 
this.name = name; 
left = l; 
right = r; 
} 

public void run() { 
left.pickup(); 
System.out.println(name + " 眼明手快,以迅雷不及掩耳之势一把抓起 "+left.name); 
right.pickup(); 
System.out.println(name + " 眼明手快,以迅雷不及掩耳之势一把抓起 "+right.name); 
System.out.println(name + " 左右开弓,狼吞虎咽起来"); 
try { 
Thread.sleep(2000); 
} catch (InterruptedException e) { 
// TODO 自动生成 catch 块 
e.printStackTrace(); 
} 
System.out.println(name + " 酒足饭饱,打了个饱嗝,心满意足的放下了 "+left.name+" 和 " +right.name); 
left.putdown(); 
right.putdown(); 

} 
} 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -