北大青鸟东莞金码网络营销学院,是国内知名网络营销培训品牌,汇集行...
中专学什么技术发展好 学IT技术,做企业争抢紧缺人才! ...
BENET6.0网络工程师课程
金码大型电商公开课,电商怎么玩,全在这!
2022学什么技术好
东莞北大青鸟金码学校,东莞电脑培训,计算机专业技能培训,东莞北大青...
男生学什么技术有钱途? 软件开发师、网络工程师、互联网架构师、WE...
设有5个哲学家,共享一张放油把椅子的桌子,每人分得一吧椅子.但是桌子上总共执友支筷子,在每个人两边分开各放一支.哲学家只有在肚子饥饿时才试图分两次从两边拾起筷子就餐.
就餐条件是:
1)哲学家想吃饭时,先提出吃饭的要求;
2)提出吃饭要求,并拿到支筷子后,方可吃饭;
3)如果筷子已被他人获得,则必须等待该人吃完饭之后才能获取该筷子;
4)任一哲学家在自己未拿到2支筷子吃饭之前,决不放下手中的筷子;
5)刚开始就餐时,只允许2个哲学家请求吃饭.
试问:
1)描述一个保证不会出现两个邻座同时要求吃饭的算法;
2)描述一个既没有两邻座同时吃饭,又没有人饿死的算法;
3)在什么情况下,5个哲学家全都吃不上饭?
哲学家进餐问题是典型的同步问题.它是由Dijkstra提出并解决的.该问题是描述有五个哲学家,他们的生活方式是交替地进行思考和进餐.哲学家 们共用一张圆桌,分别坐在周围的五张椅子上.在圆桌上有五个碗和五支筷子,平时一个哲学家进行思考,饥饿时便试图取用其左右岁靠近他的筷子,只有在他拿到 两支筷子时才能进餐.进餐完毕,放下筷子继续思考.
利用记录型信号量解决哲学家进餐问题
经分析可知,筷子是临界资源,在一段时间只允许一个哲学家使用.因此,可以用一个信号量表示一支筷子,由这五个信号量构成信号量数组.其描述如下:
var chopstick:array[0,...,4]of semaphore;
所有信号量被初始化为1,第i个哲学家的活动可描述为:
repeat
wait(chopstick);
wait(chopstick[(i+1) mod 5]);
...
eat;
...
signal(chopstick);
signal(chopstick[(i+1) mod 5]);
...
think;
until false;
在以上描述中,哲学家饥饿时,总是先去拿他左边的筷子,即执行wait(chopstick);成功后,再去拿他右边的筷子,即执行 wait(chopstick[(i+1) mod 5]);,再成功后便可进餐.进餐完毕,又先放下他左边的筷子,然后放下他右边的筷子.虽然,上述解法可保证不会有两个相临的哲学家同时进餐,但引起死锁 是可能的.假如五个哲学家同时饥饿而各自拿起右边的筷子时,就会使五个信号量chopstick均为0;当他们试图去拿右边的筷子时,都将因无筷子可拿而 无限期地等待.对于这样的死锁问题可采用以下集中解决方法:
(1)至多只允许四个哲学家同时进餐,以保证至少有一个哲学家能够进餐,最终总会释放出他所使用过的两支筷子,从而可使更多的哲学家进餐.
(2)仅当哲学家的左右两支筷子都可用时,才允许他拿起筷子进餐.
(3)规定奇数号的哲学家先拿起他左边的筷子,然后再去拿他右边的筷子;而偶数号的哲学家则相反.按此规定,将是1,2号哲学家竞争1号筷 子,3,4号哲学家竞争3号筷子.即五个哲学家都竞争奇数号筷子,获得后,再去竞争偶数号筷子,最后总会有一个哲学家能获得两支筷子而进餐.
看了整整一个上午的操作系统,看得头都大了。
我们老师的算法的大意好像是用一个总的信号量,只有获得信号量的哲学家才可以拿筷子。
具体算法如下(用类c描述):
#include "所有头文件"
#define N 5
#define left (i-1)%N //i的左邻号码
#define right (i+1)%N //i的右邻号码
#define think 0
#define hungry 1
#define eating 2
typedef int semaphore //信号量是一个特殊的整型变量
int state[N] //记录每个人的状态
semaphore mutex=1; //设置信号量
semaphore s[N]; //每个哲学家一个信号量
void philosopher(int i)
{
while(true) //无限循环
{
think;
take_chopstick(i);
eat;
put_chopstick(i);
}
}
void take_chopstick(int i)
{
p(& mutex); //对信号量的p操作
state=hungry;
test(i); //试图得到两支筷子
v(&mutex); //v操作
p(&s); //得不到筷子则阻塞
}
void put_chopstick(int i)
{
p(& mutex);
state=think; //进餐结束
test(left); //看左邻是否进餐
test(right); //再看右邻
v(&mutex);
}
void test(int i)
{
if(state==hungry&&左邻没进餐&&右邻没进餐)
{
state=eating;
v(&s);
}
}
奔跑吧金码学子活动由东莞北大青鸟主办,由校区师生参与,在东莞市虎英公园举行了奔跑吧金码的大型活动。这场活动分为五关,参赛师生3人一
项目实训招募啦~~北大青鸟东莞金码学校合作企业、学术团队举行项目实训招募活动,让学员有机会根据自己的喜好选择项目实训,参与项目的开发。
转眼又到了一年一次的高考中考的时候到了,这个夏天你有没有考上你理想的大学或者心仪的高中学校呢?接下来又如何安排你自己的学习路线呢?对于平时成绩不理想的学生来说,是时候该考虑一下,下一步学什么电脑技术对自己的前途有帮助了。那么,学电脑学什么好就业呢?
北大青鸟东莞金码教育周边的体育馆 北大青鸟东莞金码教育周边的图书馆 北大青鸟东莞金码教育周边的玉兰大剧院 北大青鸟东莞金码教育周边的展览馆
读电脑学什么有前途?这是一个很多人都会思考的一个问题,无论是正在读书的学生还是已经毕业了的学生,都会为自己以后的前景做打算。那么读电脑学什么有前途呢?又能拿高薪,就业好,每天在舒适的环境下轻松工作呢
人力资源和社会保障部数据显示,今年中国将有699万名普通高校毕业生,这也是新中国成立以来大学毕业生最多的一年。同时,中国经济增幅趋缓
一个月内找到6份工作,其中经历了四次群面,且每次都以出色的表现通过这一关。这个牛人就是南京大学数学系大四学生吴新雨。记者从前晚结束
简历一定要突出你的能力、成就以及过去经验,重要的是要明确以下几点:1、明确你要寻求的是不是这个职位。只有你明白这个职位做什么,你要
1 要仔细检查已成文的个人简历,绝对不能出现错别字、语法和标点符号方面的低级错误。2 个人简历最好用A4标准复印纸打印, 字体最好采用常
销售属于大众情人,门槛也低,所以找工作相对容易。可是,正因为太容易找了,所以离职率也高。调查显示,50%的销售在第一年会离开公
云计算与大数据的结合可以说是天作之合。大数据需要灵活的计算环境,而后者可以快速、自动地进行扩展以支持海量数据。基础设施云可以精准地
Android应用可以包含,多个Activity,某个Activity可以启动另外的Activity。这些Activity采用栈结构来管理,新打开的Activity叠放在当前的Activity之上,当前的Activity停止运行。
最近很多朋友都在问我是否能把我那一句话木马隐藏到HTML或图片里,其实把一句话木马插入到PHP文件中就已经很隐蔽了,如果说硬是要放到 HTM...
Android N你了解它的安全功能吗?在上个月召开的I O大会上Google透露了关于Android N的诸多新功能,时隔1个月外媒SoftPedia撰文对于Googl
各种编程语言的作用及编程问题。如今开发者有很多种途径去解决编程问题,不管是利用大量的类库还是各种各样的技术工具。当然了,随便选择一
2014年就业季,预计将超30万海归同国内727万应届毕业生一起面对就业竞争。2013年,三分之一海归的第一份工作年薪不足4万元,超一半海归
金秋十月不虚度,改变新生正当时!现在报名学习IT热门课程,北大青鸟东莞金码教育助你升职加薪快人一步!
前言:马云在2016年的杭州云栖大会上,提出线上线下和物流必须结合在一起,才能诞生真正的新零售。 而新零售对于蜗居在以淘宝为
2013年3月1日上午,中心就业部刘老师应东莞市科荣信息科技有限公司蒋总的邀请,带领5名优秀毕业生去参加企业面试。东莞市科荣信息科技有限...
近日,在深圳大学隆重举行的嘉华职业教育学员年会。在会上,《中小网店流量宝典》作者杨鑫老师代表嘉华职业教育金蛛校区与华南地区最大