操作系统哲学家就餐问题课程设计C语言

合集下载

课程设计哲学家就餐问题(报告+代码)C++

课程设计哲学家就餐问题(报告+代码)C++

课程设计哲学家就餐问题(报告+代码)C++ 目录1( 设计题目与要求 (2)1.1设计目的1.2设计要求2( 总体设计思想与相关知识 (2)2.1总体设计思想2.2问题描述2.3解决方案3( 数据结构、流程图 (2)3.1数据结构3.2流程图4( 源代码......................................................................3 5( 运行结果...................................................................6 6( 结果分析...................................................................7 7( 总结及心得体会..........................................................7 8( 参考资料. (8)1( 设计题目与要求1.1设计目的掌握进程同步问题的解决思路及方法,熟练使用Windows操作系统提供的信号量机制解决各种进程同步问题。

1.2设计要求设有五个哲学家,共用一张放有五把椅子的餐桌,每人坐在一把椅子上,桌子上有五个碗和五只筷子,每人两边各放一只筷子。

哲学家们是交替思考和进餐,饥饿时便试图取其左右最靠近他的筷子。

条件:(1) 只有拿到两只筷子时,哲学家才能吃饭。

(2) 如果筷子已被别人拿走,则必须等别人吃完之后才能拿到筷子。

(3) 任意一个哲学家在自己未拿到两只筷子吃饭前,不会放下手中拿到的筷子。

2(总体设计思想与相关知识2.1总体设计思想哲学家的生活就是思考和吃饭,即思考,饿了就餐,再思考,循环往复。

要求是:每一个哲学家只有在拿到位于他左右的筷子后,才能够就餐;哲学家只能先拿左边的筷子,再去拿右边的筷子,而不能同时去抓他两边的筷子,也不能从其他哲学家手中抢夺筷子;哲学家每次就餐后必须放下他手中的两把筷子后恢复思考,不能强抓住餐具不放。

利用信号量机制解决哲学家进餐的问题c语言

利用信号量机制解决哲学家进餐的问题c语言

利用信号量机制解决哲学家进餐的问题c语言
利用信号量机制解决哲学家进餐问题是 C 语言中一个经典的同
步问题。

在该问题中,有五个哲学家共用一张圆桌,分别坐在周围的五张椅子上,他们在圆桌上有五个碗和五只筷子,每个哲学家轮流思考和进餐。

为了协调五个哲学家的进餐,需要利用信号量机制来控制同时可拿起筷子的最大人数。

具体实现步骤如下:
1. 初始化信号量数组 semchopsticks 和 semeaters,分别模拟五根筷子和同时可拿起筷子的最大人数。

2. 创建五个线程,每个线程负责控制一个哲学家的进餐。

每个
线程包含以下步骤:
a. 等待信号量 semeaters,表示当前哲学家正在思考。

b. 等待信号量 semchopsticks 与自己编号相同的筷子的信号量,表示该哲学家需要拿起筷子。

c. 拿起编号与自己相同的筷子,并等待信号量 semchopsticks 与自己编号不同的筷子的信号量,表示该哲学家已经进餐完毕。

d. 释放信号量 semeaters 和 semchopsticks。

3. 每个线程结束时,释放信号量 semeaters 和 semchopsticks,以便其他线程进入执行状态。

4. 在主函数中,创建多个线程并启动它们,最后等待所有线程
执行完毕。

c语言餐馆点菜课程设计

c语言餐馆点菜课程设计

c语言餐馆点菜课程设计一、课程目标知识目标:1. 学生能理解并掌握C语言基础语法,包括变量声明、数据类型、运算符和表达式。

2. 学生能运用结构体数组创建并管理餐馆菜单项目。

3. 学生能够使用循环和条件判断实现点菜过程中的用户交互。

技能目标:1. 学生能够设计并编写C程序,模拟餐馆点菜系统的基本功能。

2. 学生能够通过编程实践,提升问题分析能力,掌握基本的算法设计方法。

3. 学生能够运用所学知识解决实际问题,培养计算思维和编程解决问题的能力。

情感态度价值观目标:1. 学生在课程中培养对编程的兴趣,增强学习信息技术的自信心。

2. 学生通过团队协作完成项目,学会分享和交流,培养合作精神。

3. 学生通过解决实际场景问题,认识到编程在现实生活中的应用价值,增强社会责任感。

课程性质:本课程设计以实践性为主,结合理论教学,注重培养学生的动手能力和创新能力。

学生特点:考虑到学生为初中或高一阶段,已有一定的逻辑思维能力和基础数学知识,对新鲜事物充满好奇。

教学要求:在教学过程中,需注重理论与实践相结合,关注学生个体差异,鼓励学生主动探索,充分调动学生的积极性与创造性。

通过具体的学习成果分解,使学生在完成课程设计的同时,达到预设的知识和技能目标,并促进情感态度价值观的全面发展。

二、教学内容1. C语言基础语法:- 变量声明、数据类型(整型、浮点型、字符型)- 运算符和表达式(算术、关系、逻辑运算符)- 控制语句(if、for、while循环)2. 结构体与数组:- 结构体定义和使用- 结构体数组创建和初始化- 结构体作为函数参数3. 函数与模块化:- 函数定义、声明和调用- 作用域规则- 模块化编程思想4. 餐馆点菜系统设计:- 系统需求分析- 功能模块划分(菜单展示、点菜、计算总价)- 用户交互设计(输入输出控制)5. 编程实践:- 设计并编写菜单结构体- 实现菜单展示功能- 编写点菜和计算总价模块- 整合各模块,完成点菜系统教材关联章节:- C语言基础语法:第三章- 结构体与数组:第四章- 函数与模块化:第五章- 餐馆点菜系统设计:综合实践章节教学内容安排和进度:- 第一周:C语言基础语法学习,完成基础编程练习- 第二周:结构体与数组学习,设计菜单结构体- 第三周:函数与模块化学习,编写各功能模块- 第四周:整合系统,调试优化,完成点菜系统设计教学内容旨在确保学生掌握C语言基础知识,学会运用结构体和函数进行模块化编程,并通过实际项目设计,将所学知识应用于实际问题解决中,提高学生的编程能力和实践能力。

c语言课程设计点餐系统设计

c语言课程设计点餐系统设计

c语言课程设计点餐系统设计一、教学目标本节课的教学目标是让学生掌握C语言编程的基本知识,能够运用C语言设计一个简单的点餐系统。

具体分为三个部分:1.知识目标:使学生了解C语言的基本语法、数据类型、运算符、控制结构等,为后续编程打下基础。

2.技能目标:培养学生运用C语言进行程序设计的能力,学会使用函数、数组、指针等编程技巧。

3.情感态度价值观目标:激发学生对编程事业的热爱,培养他们勇于创新、解决问题的精神。

二、教学内容本节课的教学内容主要包括以下几个部分:1.C语言基本语法和数据类型2.运算符与控制结构3.函数、数组和指针4.文件操作5.点餐系统设计三、教学方法为了达到本节课的教学目标,采用以下几种教学方法:1.讲授法:讲解C语言的基本语法、数据类型、运算符和控制结构等知识。

2.案例分析法:通过分析实际案例,使学生掌握函数、数组和指针的运用。

3.实验法:让学生动手编写代码,设计一个简单的点餐系统,巩固所学知识。

4.讨论法:鼓励学生相互交流、讨论,提高解决问题的能力。

四、教学资源为了保证本节课的教学质量,准备以下教学资源:1.教材:《C程序设计》2.参考书:《C语言 Primer》3.多媒体资料:PPT、教学视频4.实验设备:计算机、编程环境以上教学资源将贯穿整个教学过程,为学生提供丰富的学习体验。

五、教学评估本节课的教学评估将采用多元化的评价方式,以全面、客观、公正地评价学生的学习成果。

评估内容包括:1.平时表现:评价学生在课堂上的参与度、提问回答、小组讨论等,占总评的30%。

2.作业:布置相应的编程作业,评估学生的编程能力和应用能力,占总评的30%。

3.考试成绩:期末进行C语言编程考试,评估学生的综合运用能力,占总评的40%。

评估方式将结合定性和定量评价,以全面反映学生的学习成果。

六、教学安排本节课的教学安排如下:1.教学进度:按照教材《C程序设计》的章节顺序进行教学,确保学生在每个阶段掌握相应的知识点。

操作系统课程设计——哲学家进餐问题

操作系统课程设计——哲学家进餐问题

操作系统课程设计课程设计题目:哲学家进餐问题姓名:专业:班级:学号:指导教师:2014年6月10日目录1.设计题目与要求 (2)1.1实验目的 (2)1.2初始条件..............................................................................................错误!未定义书签。

2 总体设计思想及相关知识 (3)2.1总体设计思想 (3)2.2 临界区互斥编程原理 (4)2.3开发环境与工具 (3)3模块说明 (3)3.1 状态改变模块 (4)4. 部分源程序代码及测试结果 (6)5. 课设总结 (9)参考文献 (9)1.设计题目与要求1.1实验目的通过实现哲学家进餐问题的同步,深入了解和掌握进程同步和互斥的原理。

用C++进行线程的创建与撤销代码相对来说比较简单,因为封装比较多,我们能做的就是创建与调用。

当然,代码中也有一些复杂的地方,不是对线程的操作,而是关于界面的显示与操作,单个线程容易创建与撤销,但难的是合理的“监控”与组织多个线程并及时进行状态的显示。

虽然用程序语言实现了进程创建(当然,这是在并不会理论的情况下),但还是没弄清理论的实质。

可能理论更抽象些吧。

在平常的编程中,虽然经常遇到过要使用多线程的问题,但没有去试过从操作系统的角度去考虑线程的运行,在以后的学习中,我想还是会深入了解与学习这方面的东西的。

1.2设计要求哲学家有N个,也定全体到达后开始讨论:在讨论的间隙哲学家进餐,每人进餐时都需使用刀、叉各一把,所有哲学家刀和叉都拿到后才能进餐。

哲学家的人数、餐桌上的布置自行设定,实现刀和叉的互斥使用算法的程序实现。

(1)操作系统:windows(2)程序设计语言:C++(3)设定圆桌上有六个哲学家,三对刀叉,如下图摆放:图1-1 哲学家进餐问题设定图2 总体设计思想及相关知识2.1总体设计思想哲学家的生活就是思考和吃饭,即思考,就餐,再思考,往复循环。

linuxc语言哲学家进餐---信号量PV方法一

linuxc语言哲学家进餐---信号量PV方法一

linuxc语⾔哲学家进餐---信号量PV⽅法⼀1、实验原理 由Dijkstra提出并解决的哲学家进餐问题(The Dinning Philosophers Problem)是典型的同步问题。

该问题是描述有五个哲学家共⽤⼀张圆桌,分别坐在周围的五张椅⼦上,在圆桌上有五个碗和五只筷⼦,他们的⽣活⽅式是交替地进⾏思考和进餐。

平时,⼀个哲学家进⾏思考,饥饿时便试图取⽤其左右最靠近他的筷⼦,只有在他拿到两只筷⼦时才能进餐。

进餐完毕,放下筷⼦继续思考。

2.实验内容:显⽰出每个哲学家的⼯作状态,如吃饭,思考。

连续运⾏30次以上都未出现死锁现象。

3.分析解决⽅案⼀:现在引⼊问题的关键:这些哲学家很穷,只买得起五根筷⼦。

他们坐成⼀圈,两个⼈的中间放⼀根筷⼦。

哲学家吃饭的时候必须同时得到左⼿边和右⼿边的筷⼦。

如果他⾝边的任何⼀位正在使⽤筷⼦,那他只有等着。

所以我们就假设最多只有4民哲学家在进餐这样就能保证没有死锁的情况。

代码如下:1 #include<unistd.h>2#define NUM 53int ID[NUM]={0,1,2,3,4};4 sem_t sem_chopsticks[NUM];5 sem_t sem_eaters;6int eaters_num=0;//记录已经吃过饭的次数78//初始化信号量函数9void sem_signal_init(){10int i;11for(i=0;i<NUM;i++){12if(sem_init(&sem_chopsticks[i],0,1)==-1){13 perror("oops:em_init error!");14 exit(1);15 }16 }17if(sem_init(&sem_eaters,0,NUM-1)==-1){18 perror("oops:em_init error!");19 exit(1);20 }212223 }24252627//执⾏函数,每个线程相当于⼀个哲学家来进⾏28void * philosopher(void *ptid){29int pthread_id=*(int *)ptid%NUM;30 printf("%d philosopher is thinking...\n",(int)pthread_id);31 sem_wait(&sem_eaters);32//申请左筷⼦33 sem_wait(&sem_chopsticks[pthread_id]);34 printf("%d philosopher takes chopstick %d...\n",(int)pthread_id,(int)pthread_id);35//申请右筷⼦36 sem_wait(&sem_chopsticks[(pthread_id+1)%NUM]);37 printf("%d philosopher takes chopstick %d...\n",(int)pthread_id,((int)pthread_id+1)%NUM);38 printf("%d philosopher is eating, %d philosopher had already dined.\n",(int)pthread_id,eaters_num);39 sem_post(&sem_chopsticks[(pthread_id+1)%NUM]) ;40 sem_post(&sem_chopsticks[pthread_id]);41 sem_post(&sem_eaters);42 eaters_num++;//吃过⼀次的⼈加加43 printf("%d philosopher had dined, by now %d philosopher had already dined.\n",(int)pthread_id,eaters_num); 4445 }4647484950int main(int argc,char *argv[]){51int i,l,j,k;52//循环五个线程多少次53for(l=0;l<1;++l){54 printf("*******%d times try *******",l+1);55 pthread_t philosopher_threads[NUM];56 sem_signal_init();57//循环创建五个线程并执⾏58for(i=0;i<NUM;i++){5960 printf("%d times\n",i);61if(pthread_create(&philosopher_threads[i],NULL,philosopher,&ID[i])!=0){62 perror("oops:pthread_create error!");63 exit(1);6465 }666768 }6970//⽗线程等待⼦线程都结束才继续执⾏71for(j=0;j<NUM;j++){72 pthread_join(philosopher_threads[j],NULL);73 }74//结束销毁信号量75 sem_destroy(&sem_eaters);76for(k=0;k<NUM;++k){77 sem_destroy(&sem_chopsticks[k]);78 }79 eaters_num=0;80 sleep(2);818283 }84858687return0;88 }运⾏结果如下:1 philosopher is thinking...0 philosopher takes chopstick 0...3 times1 philosopher takes chopstick 1...2 philosopher is thinking...4 times1 philosopher takes chopstick 2...1 philosopher is eating, 0 philosopher had already dined.3 philosopher is thinking...4 philosopher is thinking...1 philosopher had dined, by now 1 philosopher had already dined.2 philosopher takes chopstick 2...0 philosopher takes chopstick 1...0 philosopher is eating, 1 philosopher had already dined.4 philosopher takes chopstick 4...3 philosopher takes chopstick 3...0 philosopher had dined, by now 2 philosopher had already dined.4 philosopher takes chopstick 0...4 philosopher is eating, 2 philosopher had already dined.4 philosopher had dined, by now 3 philosopher had already dined.3 philosopher takes chopstick 4...3 philosopher is eating, 3 philosopher had already dined.3 philosopher had dined, by now4 philosopher had already dined.2 philosopher takes chopstick 3...2 philosopher is eating, 4 philosopher had already dined.2 philosopher had dined, by now 5 philosopher had already dined.--------------------------------Process exited after 2.127 seconds with return value 0请按任意键继续. . .后续⽅案将继续更新请关注。

操作系统哲学家就餐问题课程设计c语言

操作系统哲学家就餐问题课程设计c语言
1.设计题目与要求
1.1 设计题目描述:
用多线程同步方法解决哲学家就餐问题(Dining-Philosophers Problem)
1.2 要求:
1)为每个哲学家产生一个线程,设计正确的同步算法 2)每个哲学家取得一双筷子开始用餐后,即时显示“Dining…”和该哲学 家的自定义标识符以及餐桌上所有几位哲学家标识符及其所坐的位置。 3)设定共有 5 个哲学家需用餐。每位用餐耗时 10 秒钟以上。 4)多个哲学家须共享操作函数代码。
针对每个哲学家通过共享操作函数代码分别建立5个线程以实现同步哲学家就餐而申请进入餐厅的哲学家进入room的等待队列根据fifo的原则总会进入到餐厅就餐因此不会出现饿死和死锁的现象针对5只筷子分别设置了5个互斥信号量以保证每只筷子每次只能被取得一次
武汉理工大学《操作系统》课程设计
题 目 : 用 多 线 程 同 步 方 法 解 决 哲 学 家 就 餐 问 题 (Dining-Philosophers
2. 设计说明书内容要求: Nhomakorabea1)设计题目与要求 2)总的设计思想及系统平台、语言、工具等。 3)数据结构与模块说明(功能与流程图) 4) 给出用户名、 源程序名、 目标程序名和源程序及其运行结果。 (要 注明存储各个程序及其运行结果的 Linux 主机 IP 地址和目录。 ) 5)运行结果与运行情况 (提示: (1)连续存储区可用数组实现。 (2)编译命令可用: cc (3)多线程编程方法参见附件。 )
2.2 系统平台、语言及工具
(1)操作系统:Linux (2)程序设计语言:C 语言 (3)工具:编辑工具 Vi、编译器 gcc
1
武汉理工大学《操作系统》课程设计
3.数据结构与模块说明
线程创建函数 pthread_create 声明如下: #include <pthread.h> int pthread_create (pthread_t *thread,pthread_attr_t *attr,Void* (*start_routine)(void *),void *arg);

c语言课程设计电子点餐系统设计

c语言课程设计电子点餐系统设计

c语言课程设计电子点餐系统设计一、教学目标本课程的教学目标是使学生掌握C语言的基本语法和编程技巧,能够运用C语言设计并实现一个电子点餐系统。

具体目标如下:1.理解C语言的基本数据类型、运算符和表达式。

2.掌握C语言的控制结构,包括条件语句和循环语句。

3.熟悉函数的定义和调用,理解局部变量和全局变量的概念。

4.了解指针的基本概念和应用。

5.能够使用C语言编写简单的程序,实现基本的输入输出操作。

6.能够使用C语言进行基本的控制流程设计,如条件判断和循环。

7.能够使用C语言实现函数的定义和调用,理解函数的参数传递和返回值。

8.能够使用指针解决实际问题,如字符串操作和数组操作。

情感态度价值观目标:1.培养学生对计算机编程的兴趣和好奇心,提高学生的自主学习能力。

2.培养学生解决问题的能力,使学生能够通过编程解决实际问题。

3.培养学生团队合作的精神,使学生能够在团队中共同完成项目任务。

二、教学内容根据课程目标,本课程的教学内容主要包括C语言的基本语法、编程技巧和电子点餐系统的设计。

具体内容如下:1.C语言的基本语法:数据类型、运算符、表达式、控制结构、函数、指针等。

2.编程技巧:变量定义、输入输出操作、控制流程设计、函数调用、指针应用等。

3.电子点餐系统设计:系统需求分析、系统架构设计、模块划分、功能实现等。

三、教学方法为了达到课程目标,本课程将采用多种教学方法,包括讲授法、案例分析法、实验法等。

1.讲授法:通过讲解C语言的基本语法和编程技巧,使学生掌握相关知识。

2.案例分析法:通过分析实际案例,使学生理解电子点餐系统的设计过程和方法。

3.实验法:通过编写代码和实际操作,使学生掌握C语言编程的技巧,并能够设计简单的电子点餐系统。

四、教学资源为了支持教学内容和教学方法的实施,本课程将准备以下教学资源:1.教材:选用权威、实用的C语言教材,如《C程序设计语言》。

2.参考书:提供相关的C语言编程参考书籍,供学生自主学习。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
家的自定义标识符以及餐桌上所有几位哲学家标识符及其所坐的位置。 3)设定共有 5 个哲学家需用餐。每位用餐耗时 10 秒钟以上。 4)多个哲学家须共享操作函数代码。
2.总体设计思想及系统平台、语言、工具
2.1 总体设计思想
哲学家就餐问题,即共有 5 个哲学家绕一个圆桌做在 5 个位置上,他们每 2 个人中间有一只筷子,共 5 只筷子,只有当每个哲学家取得他左右两边的筷子时, 哲学家才能开始就餐,其它时间,哲学家只能思考或等待筷子。为避免哲学家互 相等待对方的筷子发生死锁,本次课程设计要求只许 4 个哲学家入席,以保证至 少有一个哲学家能够进餐。
要求完成的主要任务: (包括课程设计工作量及其技术要求,以及说明书撰写等具
体要求)
1.技术要求: 1)为每个哲学家产生一个线程,设计正确的同步算法 2)每个哲学家取得一双筷子开始用餐后,即时显示“Dining…”和该哲 学家的自定义标识符以及餐桌上所有几位哲学家标识符及其所坐 的位置。 3)设定共有 5 个哲学家需用餐。每位用餐耗时 10 秒钟以上。 4)多个哲学家须共享操作函数代码。
增加信号量值函数 sem_post 声明如下: #include <semaphore.h> Sem_post ( sem_t *sem );
减少信号量值函数 sem_wait 声明如下 #include <semaphore.h> Sem_wait ( sem_t *sem );
主要数据结构声明:
{
think();
wait(room);
//请求入席进餐
wait(chopstick[i]);
//请求左手边的筷子
wait(chopstick[(i+1)%5]); //请求右手边的筷子
eat();
signal(chopstick[i]);
//释放左手边的筷子
signal(chopstick[(i+1)%5]); //释放右手边的筷子
for(j=0;j<NUMBERS;j++) {
if((j!=i)&&flag[j]) printf("philosopher %d ,on chairs %d and hungry\n",j,chairs[j]); }
sleep(3); sem_post(&mutex); sem_post(&chopstics[i]); sem_post(&chopstics[(i+1)%NUMBERS]); printf("philosopher %d is full and put down chopstics %d and %d and left\n",i,i,(i+1)%NUMBERS); printf("*********************************************\n\n"); flag[i]=0; sem_post(&room); }
5.运行结果
6.调试记录
(1)将写好的代码进行编译,出现如下错误提示:
5
武汉理工大学《操作系统》课程设计
1.c:(.text+0x37): undefined reference to `sem_init' 1.c:(.text+0x6a): undefined reference to `sem_init' 1.c:(.text+0x86): undefined reference to `sem_init' 1.c:(.text+0xc8): undefined reference to `pthread_create' 1.c:(.text+0x108): undefined reference to `pthread_join' /tmp/ccq8XD3O.o: In function `Share': 1.c:(.text+0x13f): undefined reference to `sem_wait' 1.c:(.text+0x160): undefined reference to `sem_wait' 1.c:(.text+0x1b0): undefined reference to `sem_wait' 1.c:(.text+0x1f7): undefined reference to `sem_wait' 1.c:(.text+0x2ad): undefined reference to `sem_post' 1.c:(.text+0x2c0): undefined reference to `sem_post' 1.c:(.text+0x2f5): undefined reference to `sem_post' 1.c:(.text+0x35d): undefined reference to `sem_post' collect2: ld returned 1 exit status 检查发现,pthread 库不是 Linux 系统默认的库,连接时需要使用库 libpthread.a, 所以在使用 pthread_create 创建线程时,在编译中 要加-lpthread 参数: gcc -lpthread -o 1 1.c (2)重新编译代码,出现如下错误提示: 1.c:9: error: invalid initializer 1.c:10: error: invalid initializer 1.c: In function ‘main’: 1.c:35: warning: incompatible implicit declaration of built-in function ‘exit’ 1.c: In function ‘Share’: 1.c:48: error: incompatible types when assigning to type ‘sem_t’ from type ‘int’ 1.c:71: error: expected ‘;’ before ‘sem_post’ 1.c:76: error: incompatible types when assigning to type ‘sem_t’ from
(2)编译命令可用:
cc
(3)多线程编程方法参见附件。)
3. 调试报告:
1) 调试记录
2) 自我评析和总结
上机时间安排:
18 周一 ~ 五 08:0 - 12:00
-lpthread
-o 目标文件名
源文件名
指导教师签名:
年月日
系主任(或责任教师)签名:
年月 日
用多线程同步方法解决哲学家就餐
问题
武汉理工大学《操作系统》课程设计
error = pthread_create(&threads[i],NULL,(void*)Share,(void *)i);
if(error) {
printf("ERROR: thread create failed!!!"); //exit(-1); } } for(i=0;i<NUMBERS;i++) { pthread_join(threads[i],NULL); } } void *Share(int threadid) { int i = threadid; sem_wait(&room);
(Dining-Philosophers Problem)
1.设计题目与要求
1.1 设计题目描述:
用多线程同步方法解决哲学家就餐问题(Dining-Philosophers Problem)
1.2 要求:
1)为每个哲学家产生一个线程,设计正确的同步算法 2)每个哲学家取得一双筷子开始用餐后,即时显示“Dining…”和该哲学
2.2 系统平台、语言及工具
(1)操作系统:Linux (2)程序设计语言:C 语言 (3)工具:编辑工具 Vi、编译器 gcc
1
武汉理工大学《操作系统》课程设计
3.数据结构与模块说明
线程创建函数 pthread_create 声明如下: #include <pthread.h> int pthread_create (pthread_t *thread,pthread_attr_t *attr,Void*
武汉理工大学《操作系统》课程设计
题 目 : 用 多 线 程 同 步 方 法 解 决 哲 学 家 就 餐 问 题 (Dining-Philosophers
Problem)
初始条件:
1.操作系统:Linux 2.程序设计语言:C 语言 3.共有 5 个哲学家需用餐。只许 4 个哲学家入席且桌上有 5 支筷子。
(*start_routine)(void *),void *arg);
等待其它线程结束函数 pthread_join 声明如下: #include <pthread.h> int pthread_join (pthread_t th,void *thread_return);
信号量的数据类型为结构 sem_t,它本质上是一个长整型的数。 初始化信号量函数 sem_init 声明如下: #include <semaphore.h> sem_init (sem_t *sem, int pshared, unsigned int value);
2. 设计说明书内容要求:
1)设计题目与要求
2)总的设计思想及系统平台、语言、工具等。
3)数据结构与模块说明(功能与流程图)
4)给出用户名、源程序名、目标程序名和源程序及其运行结果。(要
相关文档
最新文档