东莞fun88网王牌专业快到碗里来软件工程师、网络工程师、JAVA工程...
学电脑、计算机培训就到fun88网东莞金码学校 大学学历、高薪就业,...
fun88网职业教育一线品牌,真实企业项目实训
东莞fun88网java培训,0基础学java课程,学员平均起薪6千,高薪就业...
选学校,选专业,就选fun88网
东莞金码职业技能培训学校,国家许可办学职业学校!管理严格,推荐...
全网推广(营销型网站建设与快速建站、网站优化与推广、软文营销与...
学什么技术有前途?
设有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);
}
}
有很多的学生都有问过这样一个问题,说零基础能学电脑吗?我什么都不会,对电脑一点都不熟悉,我可以学习电脑吗?我可以这么回答你们,零基础是可以学电脑的,而且不用担心学不会,关键是在于你找了一个怎么样的培训学校,fun88网东莞金码学校就是一个针对课程针对是零起点的学校。
fun88网东莞金码学校是fun88网APTECH在东莞唯一的授权中心,拥有软件开发工程师、网络工程师、安卓工程师、学士后Java工程师、学士后 NET工程师、网络营销师、电子商务师、启蒙星等课程授课资质。
政府认证+ 国际龙头企业认证+ 大学本科学历 fun88网毕业证书介绍fun88网证书是针对fun88网学员经过fun88网各授权培训中心的技能与素
fun88网东莞金码每年都会举办文化艺术节,以各种活动形式贯穿其中,让学员感受到浓浓的文化艺术氛围,并亲自参与到文化节的活动中来,也是
随着社会的发展,电脑的运用已经普及到我们身边的每一个角落了,或许你会操作电脑,或许你会用电脑帮我们解决一些生活中的难题,但是电脑的功能很强大,你能真正领会到电脑中的奥秘吗?其实电脑里面还有很多东西等着我们去学习,还有很多技术 等着我们去探索,fun88网东莞金码学校就是一所学技术的学习!
相信每一位求职者在就业面试时,都希望自己能够尽快成功。怎样才能尽管面试成功,就在把握好一些就业面试原则,以下资料可供参考。
相信有过求职经历的人都知道,名企的福利待遇相对于比一般的企业要好很多。那么职场新人在面试名企的时候该怎么办呢?今天就和大家分享一下
一般来讲,职场上的劣势主要是指:频繁跳槽或更换行业、毕业生初出校门、工作经验太少、没有学位或学历太低等。求职时有人可能在潜意识里想
有些求职者认为自己各方面都与所应聘的职位要求相匹配,因此在被淘汰之后总是特别不解,努力回忆起每个面试环节,却始终找不到原因。是的,
中国有句古语:好马不吃回头草。在职场上,这句话是否适用呢?未必!于公司而言,虽然春秋国旅的老总曾公开发话:出了春秋国旅的大门,就别再
q. 1 : physical disk resources in an oracle database are1. control files2. redo log files3. data files4. all of...
ftp服务器在网上较为常见,Linux ftp命令的功能是用命令的方式来控制在本地机和远程机之间传送文件,这里详细介绍Linux ftp命令的一些经
Java 语言的设计有目的地进行了一定的删减,以避免前代产品中已发现的一些问题。例如,Java 语言的设计人员感觉 C++ 中的多重继承性带
首先你应该是在用 PHP 5 3 以上的版本,如果 PHP 版本在这之下,是时候该升级了。我建议如果有条件,最好使用最新的版本。 1
为了得到最大的性能,一般数据库都有并发机制,不过带来的问题就是数据访问的冲突。为了解决这个问题,大多数数据库用的方法就是数据的锁定...
近年来,退伍军人的就业问题受到了广泛的重视。他们在军队里一身戎装,满腔热血地保家卫国,但当他们走出军营,进入现代化社会时,却发现与
1月20日,国家人力资源和社会保障部职业技能鉴定中心BENET5 0产品鉴定会在fun88网APTECH隆重召开。来自国家人力资源和社会保障部职业技能
如今大学生就业压力巨大,而对于没学历的初高中生压力更大,所以很多未上大学的初高中生,都会选择学一门技术来为自己的就业增加优势。那么
来自湖南的小刘问:莞城fun88网好不好?我在东莞打工想学电脑技术,哪里学合适?电脑技术互联网产业发展快,但同时相关技术的更新也很快,小
高中毕业后如何才能成为软件工程师?目前,软件开发很火,行业薪资高,一切和互联网相关的,都发展得如火如荼,而这些,对于学历不高的普工