实验四模拟“五个哲学家”问题

 

实验四模拟"五个哲学家"问题

魏陈强学号:23020092204168

谢思发学号:23020092204174

一、实验题目:

哲学家就餐问题是一种典型的同步问题,它是由Dijkstra提出并解决的。该问题描述如下:有五个哲学家围坐在一张圆形餐桌,交替做以下两件事:吃饭和思考。餐桌中间有一碗意大利面,每两个哲学家之间只有一支餐叉,如果他们想吃面则必须使用其左右的两支餐叉。显然每次最多只能有2个哲学家同时进餐,而且进餐过程有可能会产生死锁,如每个哲学家都拿着左手餐叉,等待右手餐叉。从而导致五个哲学家无法进餐而饿死。现需实验模拟解决哲学家进餐问题,使哲学家们能顺利的进餐思考。

二、算法分析:

该实验的要点是,解决并发环境下,多进程之间的同步与互斥问题。进程间的同步互斥必然涉及进程间通信。但是进程的内存空间是彼此隔离的,因此它们之间的通信只能通过如下手段:IPC机制、管道、信号或文件。本次实验采用文件手段解决通信问题。经验证如果哲学家中同时存在左撇子和右撇子,则哲学家问题有解。模拟程序的框架如下所示: 定义5个文件,分别表示5个叉子。其文件名按如下方式说明:

Static char* forks[5]={"fork0","fork1","fork2","fork3","fork4"};

哲学家的行为可以用如下函数描述: Void philosopher(int i) { while(1){ thinking(i,nsecs); TakeFork(i); eating(i,nsecs); putFork(i); } }

在主程序里,可以用以下的程序段生成5个哲学家进程:

#define N 5

for(i=0;i<N;i++){

pid=fork();

If(pid==0)

philosopher(i);

}

wait(NULL);

拿起叉子可以如此定义:

void takeFork(i)

{

if(i==N-1){

lock(forks[0]);

lock(forks[i]);

www.99jianzhu.com/包含内容:建筑图纸、PDF/word/ppt 流程,表格,案例,最新,免费下载,施工方案、工程书籍、建筑论文、合同表格、标准规范、CAD图纸等内容。


TOP最近更新内容

    长城小学关爱留守儿童工作制度
    园林史名词解释
  • 上一篇:坎坷与辉煌:中国社会保障变迁之路
  • 下一篇:重庆省2017年教师资格证认定基础知识考试试卷