文档详情

哲学家吃通心面问题

仙***
实名认证
店铺
DOC
103KB
约5页
文档ID:136035137
哲学家吃通心面问题_第1页
1/5

实验三南通大学杏林学院 操作系统实验报告实验名称哲学家吃通心面问题班级 软件101 姓名 张孝民 学号1013103032一、 实验目的1. 通过各种方式(查阅图书、上网等)查找哲学家吃通心面问题方面的相关知识,学 会自己主动通过各种途径去寻求解决问题的方法;2. 积极主动去了解哲学家吃通心面问题方面的相关知识, 加深自己对哲学家吃通心面问题的理解;3. 学习和掌握采用信号量和 PV操作的方法去解决哲学家吃通心面问题及其他类似问题二、 实验内容1. 实验环境:Microsoft Visual C++ 6.02. 实验内容:有5位哲学家围坐在一张圆桌旁, 桌子中央放有一盘通心面, 每人面前有一个空盘子,每两人之间放一把叉子;每位哲学家思考、饥饿,然后吃通心面;为了吃面,哲学家必须获得两把叉子, 且每人只能直接从紧邻自己的左边或右边去取叉子 试编一程序,采用信号量和PV操作的方法解决哲学家吃通心面问题三、 实验步骤1. 实验课上,通过上网登录校图书馆中文数据库或搜索网页, 查找有关哲学家吃通心面问题方面的相关资料;2. 实验课下,主动到校图书馆查找有关哲学家吃通心面问题方面的相关资料 ,深入了解了哲学家吃通心面问题;3. 根据自己所找到的相关信息,编程实现、组织成一篇实验报告并提交。

用C++语言编程实现如下:#in clude#in clude#in clude#in clude#in clude// 一些变量和函数的声明CRITICAL_SECTION mmutex; // 用于互斥的临界区HANDLE Fork_ [ 5];HANDLE Room_;int usetime[5]={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);}// 定义一个线程函数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,"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_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 3 1 ■rn—m. 豕家家叭和 于学X&--思 一二丁 进 子 子 子 ! 渚渚渚渚渚叉考考叉者考叉靑渚渚渚濤渚 思思思思思个田心屈个恿田举恵思思思思思 -P丁-g丁亍一用亍一 丁馬亍」T.W亍-gr 丁一「丁 进进进进进得进进得进进得进进进进进进 在在在在在即在在取在在取在在在在在在12 2 4313S243152-2 431家S家家S家家家家家家家家家 -._i」?:弄〔-^:社瓷盂盂盂齐学r壬学釜# 哲哲折晟辟口哲哲哲哲哲哲哲哲哲哲哲哲哲1111112222222233 考 344444 4 455555 6 6 666 m’-日"4-一勺.r3-- 3.一 日,.3.一 r^.m. r^T - j-n. 17^ - mrl^^ -曰.r^lm.^^1, > 1_■ > ^^^1 I rfc ^^^1 一 -■1 fc - ・ -fc ^^^1 -fc ^^^1 -F_ _ k 一 - -h ^^^1 -■ ・ ・ 1■ I ・IFBi・ -■ ・ ・ ■* ・ *■ d vr— i 一 _L b 一 J 一 1・ IL 一 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集得两个叉子进「亍思考!一』亍思老!-哲学家2在迸行思老! 一哲学家4在进行思考!s 8:8;8:8-直学家3在进行思老!-暑書家1在进彳亍思考! -罟車家5程进忡思老!~哲学家龙在进行思考! 一哲学家竄在进行思考! --哲学家々在进行思考! -哲学家m在進行思考! -哲学家久在进行思考!~苦学家£取得两个叉子进食.-哲学家2在进行思考! -哲学家勺在进彳〒思考! -3m _.-- ~暂学家丄在进行思著! -哲学家£在进行思老! -哲学家?在进行思考! -哲学家勺在進行思考! —ItI唯灌行思考! -哲学家1隹锂行思考! ~哲学家£在进行思考!得两个巽子进食・:IB10;10 :IB :ie i ii t ii ;ii :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程序设计语言及上机操作指令;。

下载提示
相关文档
正为您匹配相似的精品文档