实验四 unix 模拟“五个哲学家”问题.doc_第1页
实验四 unix 模拟“五个哲学家”问题.doc_第2页
实验四 unix 模拟“五个哲学家”问题.doc_第3页
实验四 unix 模拟“五个哲学家”问题.doc_第4页
实验四 unix 模拟“五个哲学家”问题.doc_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验四 模拟“五个哲学家”问题一、实验目的学习和掌握并发进程同步的概念和方法。二、实验要求1. 程序语法 philosopher -t 是哲学家进餐和沉思的持续时间值,缺省值为2秒。2. 五个哲学家的编号为04,分别用五个进程独立模拟。3. 程序的输出要简洁,仅输出每个哲学家进餐和沉思的信息。例如,当编号为3的哲学家在进餐时,就打印: philosopher 3 iseating而当他在沉思时,则打印: philosopher3 is thinking除此之外不要输出其他任何信息。4. 利用课堂已教授的知识而不使用线程或IPC机制进行同步。5. 程序应该一直运行,直到人为地终止它(按Ctrl-C或Ctrl-)。不允许出现僵尸进程。三、实验过程 用for循环和fork函数生成5个哲学家进程,如果是前4个哲学家,思考秒后,锁住左手边和右手边的叉子,然后开始用餐,进餐秒后,释放两边的叉子,然后到下一个哲学家,用lock判断能否同时拿起两边的叉子,要是不能同时拿起则一直等待。第5个哲学家最后应拿起第4把叉子和第0把叉子,用while(1)循环使程序一直运行。四、实验程序#include apue.h#include lock.h#include lock.c#include #define N 5 /当人数改变时改变N值就可,增加程序的可改性static char* forks5=fork0,fork1,fork2,fork3,fork4; /定义5个文件,分别表示5个叉子void takeFork(int i) /拿起叉子 if(i=N-1) /第5个哲学家最后应拿起第4把叉子和第0把叉子 lock(forks0); lock(forksi); else lock(forksi); lock(forksi+1); void putFork(int i) /放下叉子 if(i=N-1) /第5个哲学家最后应放下第4把叉子和第0把叉子 unlock(forks0); unlock(forksi); else unlock(forksi); unlock(forksi+1); void thinking(int i,int time) printf(philosopher%d is thinking.n,i); sleep(time); /等待时间void eating(int i,int time) printf(philosopher%d is eating.n,i); sleep(time);void philosopher(int i,int nsecs) /描述哲学家的行为函数 while(1) /用while(1)循环使程序一直运行 thinking(i,nsecs); / 哲学家i思考nsecs秒 takeFork(i); / 哲学家i拿起叉子 eating(i,nsecs); / 哲学家i进餐nsecs秒 putFork(i); / 哲学家i放下叉子 int main(int argc,char*argv) pid_t pidN; int i,nsecs; if(argc=1) nsecs=2; /未键入任何参数,则自动设为等待时间为2 else if(argc=3&strcmp(-t,argv1)=0) nsecs=atoi(argv2); /把以字符串形式输入的时间转换成整型数 else err_sys(input error!); for(i=0;iN;i+) initlock(forksi); for(i=0;iN;i+) /生成5个哲学家进程 pidi=fork(); if(pidi=0) /生成的子进程 philosopher(i,nsecs); wait(NULL); /父进程挂起,等待子进程结束,避免出现僵死状态 exit(0); 五、实验结果 用gcc four.c error2e.c lock.c -ofour编译生成可执行文件,命令行只有一个参数four时,每过2秒就能确定下个哲学家的状态,运行结果如下:(Ctrl + C或者ctrl + 结束)命令行有三个参数时,每过8秒就能确定下个哲学家的状态,运行程序如下:(Ctrl + C或者ctrl + 结束)六、实验小结1. 如果父进程不等待子进程的结束,那么需要终止程序运行时,就只能从控制台删除在后台运行的哲学家进程。2. 该实验的要点是,解决并发环境下,多进程之间的同步与互斥问题。进程间的同步互斥必然涉及进程间的通信(信息交换)。但是进程的内存空间是彼此隔离的,因此它们之间的通信只能通过如下手段:IPC机制、管道、信号或文件。就目前所学知识和实验要求而言,应使用信号手段。3. 对lock.c中函数的说明open(file, O_RDONLY | O_CREAT | O_EXCL,FILE_MODE)如果同时指定了O_CREAT,而文件已经存在,则会出错。可以测试一个文

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论