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

实验三 进程同步

来源:网络收集 时间:2020-05-24 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

集 美 大 学 诚毅学院信息工程系

实 验 报 告

课程名称 序号名称

计算机操作系统

实验三 进程同步

姓名 专业 成绩

评语: 孙幸杰 计算1191

学号 日期 教师

2011957032

13.11.22 洪联系

200X级XXXX专业 集美大学诚毅学院 2011~2012学年第一学期

1.实验目的:

掌握用Linux信号灯集机制实现两个进程间的同步问题 2.实验环境

Win7系统虚拟机下运行的Linux系统。 3.实验内容

司机与售票员问题是两个进程的同步问题,司机要启动汽车前,要检查售票员车门是否已经关好;

售票员要打开车门之前要等司机把车停稳. 要求:需要的信号灯: System V信号灯实现

用于控制司机是否可以启动车辆的的信号灯 S1=0 用于控制售票员是否可以开门的信号灯 S2=0 4.实验程序 (有详细注释)

//--------------------------------------------------- //这是一个公共汽车的驾驶员与售票员之间的同步问题 //一个进程模拟驾驶员,一个进程模拟售票员; //驾驶员的动作:启动车辆--驾驶车辆--到站停车 //售票员的动作:关门--售票--开门;

//售票员把车门关好后,驾驶员才能启动汽车;

//当驾驶员在一个站把车子停稳后,售票员方能打开车门; //

//本程序采用System V的信号灯集实现两者的同步 // 2010.10.8

//-----------------------------------------------------

#include #include #include #include #include #include

union semun{

int val;//仅用于SETVAL命令

struct semid_ds *buf;//用于IPC_SET等命令 ushort *array;//用于SETALL等命令 };

//用于信号灯初始化 //semid--信号灯的ID

//val--欲设置的信号灯初值

200X级XXXX专业 集美大学诚毅学院 2011~2012学年第一学期

//sn--信号灯集的分量

void seminit(int semid,int val,int sn) {

union semun arg; arg.val=val;

semctl(semid,sn,SETVAL,arg); };

//实现信号灯的P操作 //semid--信号灯的ID //sn--信号灯集的分量

void semdown(int semid,int sn) {/* define P operating*/ struct sembuf op; op.sem_num=sn;

op.sem_op=-1;//P操作为-1 op.sem_flg=0;

semop(semid,&op,1); }

//实现信号灯的V操作 //semid--信号灯的ID // sn--信号灯集的分量

void semup(int semid, int sn) {/*define V operating*/ struct sembuf op; op.sem_num=sn;

op.sem_op=1;//V操作为1 op.sem_flg=0;

semop(semid,&op,1); }

main() {

int i,j;

key_t semkey;

char *pathname=\ int semid; int rrand;

srand((int)time(0));//用于产生随机延时 semkey=ftok(pathname,45); if(semkey==-1)

200X级XXXX专业 集美大学诚毅学院 2011~2012学年第一学期

{

printf(\ exit(-1); }

semid=semget(semkey,2,IPC_CREAT | 0666); if(semid==-1) {

printf(\ exit(-1); }

seminit(semid,0,0);//对信号灯集的0号分量进行初始化 seminit(semid,0,1);//对信号灯集的1号分量进行初始化 if(fork()==0) //Create a process {//子进程作为驾驶员进程 for(i=1;i<10;i++){

semdown(semid,0);//等待售票员关门

printf(\ printf(\

rrand=1+(int)(6.0*rand()/(RAND_MAX+1.0));//产生一个(1-6)的随机数表示车辆的行驶时间 sleep(rrand);

printf(\Arrive at a station. stop!\\n\ semup(semid,1);//唤醒售票员 } } else

{//父进程作为售票员进程 for(j=1;j<10;j++){

printf(\ semup(semid,0);//唤醒司机

printf(\ semdown(semid,1); //等待汽车到站

printf(\ sleep(1); } } }

5. 实验结果及其分析 输入程序:

程序:

200X级XXXX专业 集美大学诚毅学院 2011~2012学年第一学期

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说教育文库实验三 进程同步在线全文阅读。

实验三 进程同步.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/jiaoyu/1070182.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: