第一范文网 - 专业文章范例文档资料分享平台

操作系统实验报告

来源:用户分享 时间:2025/5/29 14:26:49 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

}

六、实验结果

5

实验二:哲学家进餐

一:实验目的和要求

通过本实验,掌握经典的进程同步问题,能更好地理解进程同步概念及实现方法,能掌握如何描述这些经典问题,及他们之间的控制关系,找出相应的信号量,描述他们的流程,并注意避免死锁问题的发生:

(1) 能模拟出五个哲学家进餐;

(2) 在实验报告中要写出实验步骤及过程,实验结果及分析,要附程序及

算法。

二:实验预习要求

能明确哲学家进餐问题的含义及描述。

三:实验范例

(1) 实验内容

选择一经典同步算法——哲学家进餐问题,并编程实现;

(2) 实验说明

单一哲学家进餐时,若另外有哲学家要求进餐,当两者编号相差2或3

时,才可同时进餐,否则后者等待。并将筷子释放。

四:问题的描述及算法

有五个哲学家,他们的生活方式四交替地进行思考和进餐。哲学家们公用一张桌子,分别坐在周围的五张椅子上。在圆桌上有五个碗和五只筷子,平时哲学家进行思考,饥俄时便试图取用其左右最靠近她的筷子,只有在她拿到两只筷子时才能进餐,进餐毕,放下筷子进行思考。 算法描述如下:

1. 给五个哲学家编号为1,2,3,4,5;产生一个1~5之间的随机数,规定一次产生两个哲学家; 2. 设置一个全局变量,将上一次产生的信号量纪录在内,并判断此次与上次的编号是否相差2或3;若是,即可同时吃,并释放上一个哲学家的筷子,若不是,只释放上一个哲学家的筷子。 3. 作N次循环(N自己输入)

6

五:附程序

#include #include #include #include #include using namespace std;

bool tools[5]; //全局变量,用餐工具

CRITICAL_SECTION cs; //信号量, 在线程中使用,临界区 class Philosopher {

private: int number;

int status; /*标记当前哲学家的状态,0表示正在等待

(即处于饥饿状态),1表示得到两支筷子正在吃饭,2表示正在思考*/ public:

Philosopher(int num=0): status(2), number(num) { } const int find() {

return number; }

const int getinfo() { return status; }

void Change() ; //状态改变函数 void dead_lock(); };

void Philosopher::dead_lock() {

EnterCriticalSection (&cs) ; //进入临界区 string s; if(status==1) {

tools[number%5]=true;

// tools[(number-1)%5]=true; status=2; }

else if(status==2) {

status=0;

//tools[(number-1)%5]=false; //tools[(number-1)%5]=true; }

7

else if(status==0) {

tools[number%5]=false; tools[(number-1)%5]=false; status=1; }

LeaveCriticalSection (&cs) ; // cout<<\}

/////////

void Philosopher::Change() {

EnterCriticalSection (&cs) ; //进入临界区 if(status==1) //正在进餐 {

tools[number%5]=true; //放下左手工具 tools[(number-1)%5]=true; //放下右手工具 status=2; //改变状态为思考 }

else if(status==2) //思考中 {

status=0; //改变状态为等待 }

else if(status==0) //等待中 {

if(tools[number%5]&&tools[(number-1)%5]) //左右手两边工具均为 {

tools[number%5]=false; //拿起左手工具 tools[(number-1)%5]=false; //拿起右手工具 status=1; } }

LeaveCriticalSection (&cs) ; }

string print(Philosopher *pA) {

//pA->Change(); int i=pA->getinfo(); string str; if(i==0) str=\等待\else if(i==1) str=\就餐\

8

搜索更多关于: 操作系统实验报告 的文档
操作系统实验报告.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c3ewcu0sb831emx02t1mg_2.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top