欢迎来到天天文库
浏览记录
ID:22527905
大小:70.72 KB
页数:5页
时间:2018-10-30
《哲学家进餐问题》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++此代码随机产生一个线程进行了哲学家进餐问题的描述在控制台下运行,输入A是无死锁的哲学家进餐,输入B是有死锁的哲学家进餐。+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*//*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++aut
2、hor:徐文锋From:hfutIDCard:20112529+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/#include#include#include#defineN5usingnamespacestd;DWORDWINAPIDe$cribeProc(LPVOIDIpParameter);DWORDWINAPIChoicelProc(LPVOIDIpParameter);D
3、WORDWINAPIChoice2Froc(LPVOIDIpParameter);DWORDWINAPIPhilosopherProcl(LPVOIDIpParameter);DWORDWINAPIPhilosopherProc2(LPVOIDIpParameter);HANDLEhMutex;HANDLEChopStick[N];HANDLEPhilosopherLNJ;inti;//threaddata//threaddata//threaddata//threaddata//threaddataintmain()ch
4、arch;HANDLEde$Thread,choice[2];desThread=CreateThread(NULL,0,DescribeProc,NULL,0,NULL);CloseHandle(desThread);for(i=0;i5、:M«endl;C0Ut«”按A选择无死锁,按B选择产生死锁,按N选择返出”《endl;cin»ch;if(W==ch){choicelOJ=CreateThread(NULL,0,Choice1Proc,NULL,0,NULL);CloseHandle(choice[0]);ch=V;}ifCB^ch){choice[1]=CreateThread(NULL,0,Choice2Proc,NULL,0,NULL);CloseHandle(choice[11);ch='Q*;}if(’N’==ch)return0;Sleep6、(30000);}return0;DWORDWINAPIDescribeProc(LPVOIDlpParameter//threaddata)(cout«,f哲学家就餐问题可以这样表述^«endhcout<<"假设有五位哲学家围坐在一张圆形餐桌旁,做以下两件事情之一cout<<"吃饭,或者思考。吃东两的时候,他们就停止思考,思考的时候也停止吃东西。餐桌中间有一大碗";cout<<”意大利而,每两个哲学家之间有一只餐叉。因为用一只餐叉很难吃到意大利而,所以假设哲学家必”;cout<<”须用两只餐叉吃东两。他们只能使用自己左右7、手边的那两只餐叉。哲学家就餐W题有时也用米饭和”;cout<<”筷子而不是意大利而和餐叉来描述,因为很明显,吃米饭必须用两根筷子。"«endl;cout<<"哲学家从来不交谈,这就很危险,可能产生死锁,每个哲学家都拿着左手的餐叉,永远都在等右边";cout<<”的餐叉(或者相反)。即使没有死锁,也有可能发生资源耗尽。例如,假设规定当哲学家等待另一I';COLlt<<”只餐叉超过五分钟后就放下自己手里的那一只餐叉,并且再等五分钟后进行下一次尝试。这个策略I*;cout<<”消除了死锁(系统总会进入到下一个状态),但仍然有可能8、发生“活锁”。如果五位哲学家在完全”;cout<<”相同的时刻进入餐厅,并同时拿起左边的餐叉,那么这些竹学家就会等待五分钟,同时放下手中的”;cout<<"餐叉,再等五分钟,又同吋拿起这些餐叉。H«endl;cout«*J在实际的计算机W题巾,缺乏餐叉可以类比为缺乏共享资源。一种常用的计算机技术是资源加
5、:M«endl;C0Ut«”按A选择无死锁,按B选择产生死锁,按N选择返出”《endl;cin»ch;if(W==ch){choicelOJ=CreateThread(NULL,0,Choice1Proc,NULL,0,NULL);CloseHandle(choice[0]);ch=V;}ifCB^ch){choice[1]=CreateThread(NULL,0,Choice2Proc,NULL,0,NULL);CloseHandle(choice[11);ch='Q*;}if(’N’==ch)return0;Sleep
6、(30000);}return0;DWORDWINAPIDescribeProc(LPVOIDlpParameter//threaddata)(cout«,f哲学家就餐问题可以这样表述^«endhcout<<"假设有五位哲学家围坐在一张圆形餐桌旁,做以下两件事情之一cout<<"吃饭,或者思考。吃东两的时候,他们就停止思考,思考的时候也停止吃东西。餐桌中间有一大碗";cout<<”意大利而,每两个哲学家之间有一只餐叉。因为用一只餐叉很难吃到意大利而,所以假设哲学家必”;cout<<”须用两只餐叉吃东两。他们只能使用自己左右
7、手边的那两只餐叉。哲学家就餐W题有时也用米饭和”;cout<<”筷子而不是意大利而和餐叉来描述,因为很明显,吃米饭必须用两根筷子。"«endl;cout<<"哲学家从来不交谈,这就很危险,可能产生死锁,每个哲学家都拿着左手的餐叉,永远都在等右边";cout<<”的餐叉(或者相反)。即使没有死锁,也有可能发生资源耗尽。例如,假设规定当哲学家等待另一I';COLlt<<”只餐叉超过五分钟后就放下自己手里的那一只餐叉,并且再等五分钟后进行下一次尝试。这个策略I*;cout<<”消除了死锁(系统总会进入到下一个状态),但仍然有可能
8、发生“活锁”。如果五位哲学家在完全”;cout<<”相同的时刻进入餐厅,并同时拿起左边的餐叉,那么这些竹学家就会等待五分钟,同时放下手中的”;cout<<"餐叉,再等五分钟,又同吋拿起这些餐叉。H«endl;cout«*J在实际的计算机W题巾,缺乏餐叉可以类比为缺乏共享资源。一种常用的计算机技术是资源加
此文档下载收益归作者所有