山东大学操作系统实验6死锁问题实验.docVIP

山东大学操作系统实验6死锁问题实验.doc

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
山东大学操作系统实验6死锁问题实验

计算机科学与技术学院实验报告 ? 实验题目:实验六.死锁问题实验 学号:日期:2014.4班级:计基地12姓名:李实验目的: 通过本实验观察死锁产生的现象,考虑解决死锁问题的方法。从而进一步加深对于死锁问题的理解。掌握解决死锁问题的几种算法的编程和调试技术。练习怎样构造管程和条件变量,利用管程机制来避免死锁和饥俄问题的发生。实验要求: 在两个城市南北方向之间存在一条铁路,多列火车可以分别从两个城市的车站排队等待进入车道向对方城市行驶,该铁路在同一时间,只能允许在同一方向上行车,如果同时有相向的火车行驶将会撞车。请模拟实现两个方向行车,而不会出现撞车或长时间等待的情况。您能构造一个管程来解决这个问题吗? 总结和分析示例实验和独立实验中观察到的调试和运行信息。分析示例实验是否真正模拟了哲学家就餐问题?为什么示例程序不会产生死锁?为什么会出现进程死锁和饥饿现象?怎样利用实验造成和表现死锁和饥饿现象?管程能避免死锁和饥饿的机理是什么?您对于管程概念有哪些新的理解和认识?条件变量和信号量有何不同?为什么在管程中要使用条件变量而不直接使用信号量来达到进程同步的目的?示例实验中构造的管程中的条件变量是一种什么样式的?其中的锁起了什么样的作用?你的独立实验程序是怎样解决单行道问题的?您是怎样构造管程对象的?根据实验程序、调试过程和结果分析写出实验报告。硬件环境: 内存:1G 操作系统:32位 磁盘:32 G 软件环境: ubuntu11.04 gcc4.8实验步骤: 登录系统,熟悉linux命令和用户界面。 分析问题并制定解决方案:利用linux的IPC的信号量机制完成实验。 编写程序代码rw以及makefile文件 编译并执行已经编写好的程序 理解死锁原理,考虑如何实现发现死锁和避免死锁发生。回答相应实验问题。 实现方式: 编写以下文件直接在命令行运行 Makefile: CC=gcc -w FFLAGS=-lpthread -O all: rw.c $(CC) $(FFLAGS) rw.c -std=c99 -o rw -lm clean: rm -f rw Rw: #includestdlib.h #includestdio.h #includepthread.h #includesemaphore.h void* read(void* tid); void* write(void* tid); //使用经典读写互斥解决这一问题,即当从甲地往乙地有一辆火车时, //从甲地往乙地的其它火车也可运行在轨道上,直到乙地有一辆火车请求从乙地往甲地,一辆火车从甲地往乙地 //把从甲地往乙地火车看作读者 //把从乙地往甲地火车看作写者 int suma=0,sumb=0; int rate; sem_t writemutex,readmutex,mutex1,mutex2,mutex3,mutex4; int main(int argc,char *argv[]){ pthread_t* t; if(argv[1]!=NULL) rate=atoi(argv[1]); //信号量初始化, sem_init(writemutex,0,1); sem_init(readmutex,0,1); sem_init(mutex1,0,1); sem_init(mutex2,0,1); sem_init(mutex3,0,1); sem_init(mutex4,0,1); t=malloc(6*sizeof(pthread_t)); printf(现在开始火车行驶问题模拟\n); printf(---------------------------------------\n); for(long thread=0;thread3;thread++){ pthread_create(t[thread],NULL,read,(void*)thread); } for(long thread=3;thread6;thread++) pthread_create(t[thread],NULL,write,(void*)thread); for(long thread=0;thread6;thread++){ pthread_join(t[thread],NULL); } printf(结束火车行驶问题模拟\n); return 0; } //读者进程 void* read(void* tid){ while(1){ sem_wait(mutex4); sem_wait(mutex2); sumb=sumb+1; if(sumb==1){ se

文档评论(0)

2017ll + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档