欢迎来到天天文库
浏览记录
ID:59408010
大小:64.50 KB
页数:2页
时间:2020-05-27
《哲学家进餐问题报告.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、〃信号量是一个特殊的整〃记录每个人状态的数组〃临界区互斥〃每个哲学家一个信号量//哲学家号码,从〃无限循环〃哲学家正在思考//需要两只叉子,或者阻塞〃进餐〃把两把又子同时放回桌哲学家进餐问题报告任务级别:B组任务完成人:计算机二班赵旭3002204055计算机二班钟方3002204058计算机三班马悦3002204076组长:赵旭报告日期:2004.11.10问题描述:五个哲学家围坐在一张圆桌周围,每个哲学家面前都有一碟通心面。由于面条很滑,所以要两把又子才能夹住。相邻两个碟子之间有一把又子。哲学家的生活包括两种活动:即吃饭和思考。当一个哲学家
2、觉得饿时,他就试图分两次去取他左边和右边的又子,每次拿一把,但不分次序。如果成功地获得了两把又子,他就开始吃饭,吃完以后放下又子继续思考。设计思路伪代码:^defineN5//哲学家数目^defineLEFT(i-l)%N//i的左邻号码ttdefineRIGHT(i+l)%N//i的右邻号码ttdefineTHINKING0//哲学家在思考^defineHUNGRY1//哲学家想取得又子ttdefineEATING2〃哲学家正在吃面typedefintsemaphore;形变量intstate(N);semaphoremutex=1;sema
3、phores[N];voidphilosopher(inti)0到N-l{while(TRUE){think();takeforks(i);eat();putforks(i);}void{takeforks(inti)P(&mutex);state[i]=HUNGRY;//哲学家号码,从0到NT〃进入临界区〃记录下哲学家饥饿的事头}test(i);V(&mutex);P(&s[i]);〃试图得到两只又子〃离开临界区//如果得不到又子则阻塞voidputforks(inti)(P(&mutex);state[i]=THINKING;test(LE
4、FT);能进餐test(RIGHT);能进餐V(&mutex);ij〃哲学家号码,从。到N-1〃进入临界区〃哲学家进餐结束〃看一下左邻居现在是否〃看一下右邻居现在是否〃离开临界区void)test(inti)〃哲学家号码,从0到NTIif(state[i]==HUNGRY&&state[LEFT]!=EATING&&state[RIGHT]!=EATING){state[i]=EATING;V(&s[i]);在此IPC问题中,对信号量进行P,V操作函数的参数semid是要实施PV操作的信号量集合的标识号,在其中指出对公共信号量mutex,每个哲
5、学家一个信号量s[n],等信号量集合进行操作.有一个主函数main,通ifork函数建立5个子进程,每个进程代表一•个哲学家的thinking等活动,然后通过建立2*N+1个信号量组来完成!实习体会:通过这次实习,使我们了解了linux有关ipc问题,进程间通信的相关知识,因为是大家的第一次合作,不是十分默契,所以程序还有一•些小问题,我们会在下面的学习中把程序进行改进。
此文档下载收益归作者所有