中国石油大学Linux实验报告下.docVIP

  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文档。上传文档
查看更多
中国石油大学Linux实验报告下

实验报告名称: Linux系统实验 [Linux系统实验]实验报告 班级 软件10-01 姓名 周诗豪 学号日期 2012年12月3日 Linux系统实验实验报告包括5,6,7、8共四个实验。 评阅人 评语 实验五 实验名称:哲学家进餐 一 实验目的 初步了解线程编程知识。 掌握linux环境下的多线程编程。 通过编程加深对知识的理解。 二 实验内容 在linux环境下实现哲学家进餐模型。 三 实验环境 软件环境:Red Hat Linux 2.4.20-8,VMware WorkSation ACE 版 硬件环境:DELL XPS L502x 四 实验整体思路(请列出实验用到的算法和思路) 主要思路: 实验中一个哲学家线程的处理分为: 将面条分给某个人,分面条的时候对面条进行加锁。分完之后解锁。 将一双筷子分给某个人,分筷子的时候对所有的筷子进行加锁。避免出现不愉快的事情。分完之后解锁。 当一个人吃饭完之后,首先对筷子进行加锁,然后释放所持有的筷子并发通知给两边的人,让两边的人检查是否有一双筷子吃饭。 因为电脑处理速度过快,执行sleep( )让线程挂起一断时间。(避免一直只有一个人在吃)。 在int main( )中 创建一组线程号pthread_t th[NUMBER]; 创建任意传值指针void * retval; 初始化桌子init(T); 循环创建5个哲学家进程pthread_create(th[i],NULL,philosopher,(void *) i); 等待哲学家进程结束pthread_join(th[i],retval); 回收资源del(T); 程序中使用table结构体装桌子上的所有东西。 struct table { //桌子内容 int chopsticks[NUMBER]; //筷子当前是否空闲1空闲 pthread_mutex_t lock; //同时只能一个人操作桌子 pthread_cond_t philosopher[NUMBER]; //能拿筷子的信号 int nuddles; //剩余面条数 pthread_mutex_t nlock; //面条锁 }T; void pick_chopsticks(int Nmbr) { pthread_mutex_lock(T.lock); //某个哲学家正在操作所以加锁 if(T.chopsticks[Nmbr] == 1 T.chopsticks[(Nmbr+NUMBER-1)%NUMBER] == 1) { //IF一个人两边的筷子都可以使用 T.chopsticks[Nmbr] = 0; //筷子占用中 T.chopsticks[(Nmbr+NUMBER-1)%NUMBER] = 0; } else pthread_cond_wait(T.philosopher[Nmbr],T.lock);//没筷子 等着 pthread_mutex_unlock(T.lock); //操作完毕解锁 } void drop_chopsticks(int Nmbr) { pthread_mutex_lock(T.lock); //加锁 T.chopsticks[Nmbr] = 1; //吃完饭将筷子解锁 T.chopsticks[((Nmbr+NUMBER-1)%NUMBER)] = 1; pthread_cond_signal(T.philosopher[(Nmbr+1)%NUMBER]);//筷子释放信号 pthread_cond_signal(T.philosopher[(Nmbr+NUMBER-1)%NUMBER]); pthread_mutex_unlock(T.lock); } void *philosopher(void *arg) { //接收pthread_create(th[i],NULL,philosopher,(void *) i);中的i来确定哲学家号 int Nmbr, tms; Nmbr = (int) arg; int ff = 0; while(1) {ff=0; pthr

文档评论(0)

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

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

1亿VIP精品文档

相关文档