ZKX's LAB

哲学家进餐linux图形界面 哲学家进餐

2020-07-24知识9

如何将哲学家进餐问题演示在界面上 周国平说:严格的说,哲学不是一门学问,而是一种思考的状态.所以思考者就是哲学家,当然了,成为哲学家也必须有一定的哲学基础知识,最重要的是要有自己关于世界,人生,价值的看法.哲学家就餐问题 设有5个哲学家,共享一张放油把椅子的桌子,每人分得一吧椅子.但是桌子上总共执友支筷子,在每个人两边分开各放一支.哲学家只有在肚子饥饿时才试图分两次从两边拾起筷子就餐.就餐条件是:1)哲学家想吃饭时,先提出吃饭的要求;2)提出吃饭要求,并拿到支筷子后,方可吃饭;3)如果筷子已被他人获得,则必须等待该人吃完饭之后才能获取该筷子;4)任一哲学家在自己未拿到2支筷子吃饭之前,决不放下手中的筷子;5)刚开始就餐时,只允许2个哲学家请求吃饭.试问:1)描述一个保证不会出现两个邻座同时要求吃饭的算法;2)描述一个既没有两邻座同时吃饭,又没有人饿死的算法;3)在什么情况下,5个哲学家全都吃不上饭?哲学家进餐问题是典型的同步问题.它是由Dijkstra提出并解决的.该问题是描述有五个哲学家,他们的生活方式是交替地进行思考和进餐.哲学家们共用一张圆桌,分别坐在周围的五张椅子上.在圆桌上有五个碗和五支筷子,平时一个哲学家进行思考,饥饿时便试图取用其左右岁靠近他的筷子,只有在他拿到两支筷子时才能进餐.进餐完毕,放下筷子继续思考.利用记录型信号量解决哲学家进餐问题经分析可知,筷子是临界资源,在一段时间只允许一个哲学家使用.因此,可以用一个信号量表示一支筷子,由这五。利用记录型信号量写一个哲学家进餐问题的算法 1void philosopher(int i){while(TRUE){think();take_fork(i);take_fork((i+1)%N);eat();put_fork(i);put_fork((i+1)%N);}}2semaphore chopstick[5]={1,1,1,1,1};semaphore room=4;void philosopher(int i){while(true){think();wait(room);请求进入房间进餐wait(chopstick[i]);请求左手边的筷子wait(chopstick[(i+1)%5]);请求右手边的筷子eat();signal(chopstick[(i+1)%5]);释放右手边的筷子signal(chopstick[i]);释放左手边的筷子signal(room);退出房间释放信号量room}}3semaphore chopstick[5]={1,1,1,1,1};void philosopher(int I){while(true){think();Swait(chopstick[(I+1)]%5,chopstick[I]);eat();Ssignal(chopstick[(I+1)]%5,chopstick[I]);}}4semaphore mutex=1;semaphore chopstick[5]={1,1,1,1,1};void philosopher(int I){while(true){think();wait(mutex);wait(chopstick[(I+1)]%5);wait(chopstick[I]);signal(mutex);eat();signal(chopstick[(I+1)]%5);signal(chopstick[I]);}}5:semaphore chopstick[5]={1,1,1,1,1};void philosopher(int i){while(true){think();if(i%2=0)/偶数哲学家,先。

随机阅读

qrcode
访问手机版