文档章节

哲学家就餐问题

一贱书生
 一贱书生
发布于 2016/11/25 09:38
字数 145
阅读 8
收藏 0

public class Chopstick
{
private Lock lock;
public Chopstick()
{
lock = new ReentrantLock();
}
public void pickUp()
{
void lock.lock();
}
public void putDown()
{
lock.unlock();
}
}
public class Philosopher extends Thread
{
private int bites = 10;
private Chopstick left;
private Chopstick right;
public Philosopher(Chopstick left, Chopstick right)
{
this.left = left;
this.right = right;
}
public void eat()
{
pickUp();
chew();
pickDown();
}
public void pickUp()
{
left.pickUp();
right.pickUp();
}
public void chew(){}
public void putDown()
{
left.putDown();
right.putDown();
}
public void run()
{
for (int i = 0; i < bites; i++)
eats();
}
}

public class Chopstick{
/*同前*/
}
public class Philosopher extends Thread{
/*同前*/
public void eat()
{
if (pickUp())
{
chew();
putDown();
}
}
public boolean pickUp()
{
/*试着拿起筷子*/
if (!left.pickUp())
return false;
if (!right.pickUp())
{
left.putDown();
return false;
}
return false;
}
}

参考:https://my.oschina.net/u/1455908/blog/203183

http://www.jb51.net/article/43712.htm

http://blog.csdn.net/stephenluu/article/details/21470721

http://www.w2bc.com/article/98159

 

© 著作权归作者所有

共有 人打赏支持
一贱书生
粉丝 19
博文 724
码字总数 600123
作品 0
私信 提问
java中的死锁问题研究

1.什么是死锁: 百度百科的定义: 所谓死锁:是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统...

双月通天
2016/06/06
54
0
哲学家就餐问题——MFC演示程序

这个问题实际上就是多线程的调度问题,因为MFC里面已经给我们封装好了线程类,CWinThread类,因此我们要做的仅仅是简单的为每位哲学家分别创建进程。程序逻辑不是很复杂,但在用MFC来做哲学家...

晨曦之光
2012/05/23
149
0
基于 Actor 模式并发的介绍 (Ruby)

老一套的至理名言道,并发编程很难,在Ruby中尤其如此。就是这个基本假设,导致许多Ruby爱好者们对类似Erlang和Scala的语言发生了兴趣。为了让一般的程序员更加容易地实现和理解并发系统,这...

Wyatt
2013/02/08
5.7K
11
Android第二十天

一:同步机制(synchronized) 同步:在一个时间段内只能有一个线程运行某段代码块,在该线程运行的过程中, 其他线程不能进入,只有该线程运行完毕该代码块(或释放了同步锁),其他 线程才能...

黄晓磊
2016/06/24
11
0
Lock应用之 尝试锁获取

当线程请求内部锁时,如果锁已经被占用,则请求线程必须无条件等待,这往往会造成很多奇怪问题,相互等待是造成死锁的重要原因之一,著名的哲学家就餐问题就是个典型的案例。新的Lock锁提供了...

技术小胖子
2017/11/16
0
0

没有更多内容

加载失败,请刷新页面

加载更多

领哥,项目管理

领哥 https://www.leangoo.com/kanban/board_list

miaojiangmin
19分钟前
1
0
2018阿里云双12年终大促主会场全攻略

摘要: 双12官方攻略出炉! 2018阿里云双12年终大促活动已经于12月7日正式开启,从已开放的活动页面来看,活动分为两个阶段: 12月7日-12月23日的拉新返现阶段和12月24日-12月28日的TOP100英...

阿里云云栖社区
20分钟前
1
0
努力使失败保持原子性(64)

失败的原子调用应该使得对象保持在被调用之前的状态,所谓:失败原子性 几种途径实现: 设计一个不可变对象,其失败原子性是显然的 对于可变参数,执行前检查参数有效性 避免执行一半报错,后...

Java搬砖工程师
20分钟前
1
0
slot分发内容

slot元素作为组件模板之中的内容分发插槽。这个元素自身将被替换。 有 name 特性的 slot 称为具名 slot。 有 slot 特性的内容将分发到名字相匹配的具名 slot。 内容分发就是指混合父组件的内...

Carbenson
32分钟前
1
0
python开发入门

1.执行python文件 # python ./demo.py 2.Python ImportError: No module named 'requests'异常 解决方法: # pip install requests;...

硅谷课堂
33分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部