哲学家吃通心面问题.doc

上传人:scccc 文档编号:12055113 上传时间:2021-12-01 格式:DOC 页数:8 大小:103KB
返回 下载 相关 举报
哲学家吃通心面问题.doc_第1页
第1页 / 共8页
哲学家吃通心面问题.doc_第2页
第2页 / 共8页
哲学家吃通心面问题.doc_第3页
第3页 / 共8页
哲学家吃通心面问题.doc_第4页
第4页 / 共8页
哲学家吃通心面问题.doc_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《哲学家吃通心面问题.doc》由会员分享,可在线阅读,更多相关《哲学家吃通心面问题.doc(8页珍藏版)》请在三一文库上搜索。

1、实验三南通大学杏林学院操作系统实验报告实验名称哲学家吃通心面问题班级 软件101 姓名 张孝民 学号1013103032一、实验目的1. 通过各种方式(查阅图书、上网等)查找哲学家吃通心面问题方面的相关知识,学 会自己主动通过各种途径去寻求解决问题的方法;2. 积极主动去了解哲学家吃通心面问题方面的相关知识,加深自己对哲学家吃通心面问题的理解;3. 学习和掌握采用信号量和PV操作的方法去解决哲学家吃通心面问题及其他类似问题。二、实验内容1. 实验环境:Microsoft Visual C+ 6.02. 实验内容:有5位哲学家围坐在一张圆桌旁,桌子中央放有一盘通心面,每人面前有一个空盘子,每两人

2、之间放一把叉子;每位哲学家思考、饥饿,然后吃通心面;为了吃面,哲学家必须获得两把叉子,且每人只能直接从紧邻自己的左边或右边去取叉子。试编一程序,采用信号量和PV操作的方法解决哲学家吃通心面问题。三、实验步骤1. 实验课上,通过上网登录校图书馆中文数据库或搜索网页,查找有关哲学家吃通心面问题方面的相关资料;2. 实验课下,主动到校图书馆查找有关哲学家吃通心面问题方面的相关资料,深入了解了哲学家吃通心面问题;3. 根据自己所找到的相关信息,编程实现、组织成一篇实验报告并提交。用C+语言编程实现如下:#in clude<wi ndows.h>#in clude<iostream.h

3、>#in clude<stdlib.h>#in clude<time.h>#in clude<stri ng.h>/ 一些变量和函数的声明CRITICAL_SECTION mmutex; / 用于互斥的临界区HANDLE Fork_ 5;HANDLE Room_;int usetime5=0,0,0,0,0;int eattime=1;/生成两个整数之间的随机数int ran dom_ in teger(i nt low,i nt high)if(low=high)return low;else return low+rand()%(high-low)

4、;/ 定义一个线程函数DWORD WINAPI philosopher(LPVOID n)int k=(int)n; :OpenSemaphore(MUTEX_ALL_ACCESS,false,"room"); switch(k)case 0: :OpenSemaphore(MUTEX_ALL_ACCESS,false,"fork1"); :OpenSemaphore(MUTEX_ALL_ACCESS,false,"fork2");break;case 1: :OpenSemaphore(MUTEX_ALL_ACCESS,false,

5、"fork2"); :OpenSemaphore(MUTEX_ALL_ACCESS,false,"fork3"); break;case 2: :OpenSemaphore(MUTEX_ALL_ACCESS,false,"fork3"); :OpenSemaphore(MUTEX_ALL_ACCESS,false,"fork4");break;case 3: :OpenSemaphore(MUTEX_ALL_ACCESS,false,"fork4"); :OpenSemaphore(MUTEX_

6、ALL_ACCESS,false,"fork5");break;case 4: :OpenSemaphore(MUTEX_ALL_ACCESS,false,"fork5"); :OpenSemaphore(MUTEX_ALL_ACCESS,false,"fork1");break;int i=1;while(eattime)cout<<" 单位时间: "<<i<<" - " if(random_integer(1,10)<3):WaitForSingle

7、Object(Room_,INFINITE); :WaitForSingleObject(Fork_k,INFINITE);:WaitForSingleObject(Fork_(k+1)%5,INFINITE); EnterCriticalSection(&mmutex);usetimek+;cout<<" 哲学家 "<<k+1<<" 取得两个叉子进食 ."<<endl;LeaveCriticalSection(&mmutex);:ReleaseSemaphore(Fork_(k+1)%5,

8、1,NULL);:ReleaseSemaphore(Fork_k,1,NULL);:ReleaseSemaphore(Room_,1,NULL);elsecout<<" 哲学家 "<<k+1<<" 在进行思考! "<<endl;Sleep(500);i+;:CloseHandle(Fork_k);return 0;/ 主函数int main()cout<<"*哲学家就餐问题*"<<endl;int i;Room_=:CreateSemaphore(NULL,4,4

9、,"room");Fork_0=:CreateSemaphore(NULL,1,1,"fork1");Fork_1=:CreateSemaphore(NULL,1,1,"fork2");Fork_2=:CreateSemaphore(NULL,1,1,"fork3");Fork_3=:CreateSemaphore(NULL,1,1,"fork4");Fork_4=:CreateSemaphore(NULL,1,1,"fork5");InitializeCriticalSec

10、tion(&mmutex);for(i=0;i<5;i+):CreateThread(NULL,0,philosopher,(void*)i,0,0);Sleep(10000);eattime=0;Sleep(200);cout<<"*"<<endl;for(i=0;i<5;i+)cout<<" 哲学家 "<<i+1<<" 吃面条用了 :"<<usetimei<<" 个单位时间! cout<<" 结束

11、 "<<endl;return 0;"<<endl;程序运行结果为:青潸考畫考考叉考 一思思思思恩田怎思 mLL&H 麻T, 进进进进进进得进一在在在在在在取在取取在取在在:Z 4 1考考 思思-T_ T 邀逝 !在在 考叉靑考2 2 樂思田豪家 行两行瓦十学 曲得邂朝口皆*进家家家家哲暂折>口哲哲哲哲哲哲哲哲哲哲单单考哲i 3 1 rnm. 豕家家叭和 于学X&-思 一二丁 进子子子 ! 渚渚渚渚渚叉考考叉者考叉靑渚渚渚濤渚 思思思思思个田心屈个恿田举恵思思思思思 -P丁-g丁亍一用亍一 丁馬亍T.W亍-gr 丁一丁 进进进进

12、进得进进得进进得进进进进进进 在在在在在即在在取在在取在在在在在在12 2 4313S243152-2 431家S家家S家家家家家家家家家 -._i?:弄-:社瓷盂盂盂齐学r壬学釜# 哲哲折晟辟口哲哲哲哲哲哲哲哲哲哲哲哲哲1111112222222233 考 344444 4 455555 6 6 666 m-日"4-一勺.r3- 3.一 日,.3.一 r.m. rT - j-n. 17 - mrl -曰.rlm.1, > 1_ > 1 I rfc 1 一 -1 fc - -fc 1 -fc 1 -F_ _ k 一 - -h 1 - 1 I IFBi - * * d vr

13、 i 一 _L b 一 J 一 1IL 一 111 一 Bi d -Bi一 H - 一"间间间间间间间间间间间间间间间y-寸寸寸-rr寸寸寸寸寸寸寸彖寸押寸寸寸寸寸寸寸寸寸寸寸-rT-寸寸寸 一-位位位位位位位位位位位位位;!位学fel±i_位位位位症位位位位位位位位位位位位位 二t-.却哥&-*一令.鱼色t勿岂乩!勿t-a/一鱼斤 nB-吞a-.却t-么一】-4HT.WT .-1117 -4ITT.WT -T .号旦.pHT-TLr-HT mfr号ItJ匚.百 q UT单里单单单单单单单1M单单一-哲学家斗在进行思考! -哲学家3集得两个叉子进亍思考!一亍思老!-

14、哲学家2在迸行思老! 一哲学家4在进行思考!s 8:8;8:8-直学家3在进行思老!-暑書家1在进彳亍思考! -罟車家5程进忡思老!哲学家龙在进行思考! 一哲学家竄在进行思考! -哲学家在进行思考! -哲学家m在進行思考! -哲学家久在进行思考!苦学家£取得两个叉子进食.-哲学家2在进行思考! -哲学家勺在进彳思考! -3m _.- 暂学家丄在进行思著! -哲学家£在进行思老! -哲学家?在进行思考! -哲学家勺在進行思考! ItI唯灌行思考! -哲学家1隹锂行思考! 哲学家£在进行思考!得两个巽子进食:IB10;10 :IB :ie i ii t ii ;ii

15、:n :ii t 12;12=1212位位:一位位位位位位位 单单单单单单单单单单单单单单单II IL (B ( 间 间IBI'f间IBIB间131313131313131313131313131313-哲学家?在进行思考!-哲学家2在谨行思考!養学1谥连行思考!-哲学家2*£.:._-哲学衆4在进行思靑!一哲学家3在进行思考!-哲学家z在進行思考!-IW谥灌行思考!哲学家3SS彳亍思考!-哲学家息老!-哲学家2在进行思考!-哲学塞勺在進行思考!iw瘫蓬行思考!-哲学家丄在进行思老!-哲学家£取得两个叉子进食.迸行思著!四、实验结论1.通过自己主动查找哲学家吃通心面问题方面的相关知识,培养和加强了自己主动通过各种途径去寻求解决问题的方法的能力;2.通过自己积极主动去了解哲学家吃通心面问题方面的相关知识,加深了对哲学家吃通 心面问题的理解;3. 通过本次试验,锻炼了自己的实际上机编程能力,复习巩固了以前所学的 C程序设计语言及上机操作指令;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1