ImageVerifierCode 换一换
格式:DOC , 页数:7 ,大小:420.54KB ,
资源ID:14762182      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-14762182.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(实验三---进程同步.doc)为本站会员(b****)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

实验三---进程同步.doc

1、200X级XXXX专业 集美大学诚毅学院 20112012学年第一学期集 美 大 学诚毅学院信息工程系实 验 报 告课程名称计算机操作系统序号名称 实验三 进程同步姓名孙幸杰学号2011957032专业计算1191日期13.11.22成绩教师洪联系评语:1.实验目的:掌握用Linux信号灯集机制实现两个进程间的同步问题2实验环境Win7系统虚拟机下运行的Linux系统。3.实验内容司机与售票员问题是两个进程的同步问题,司机要启动汽车前,要检查售票员车门是否已经关好;售票员要打开车门之前要等司机把车停稳.要求:需要的信号灯: System V信号灯实现用于控制司机是否可以启动车辆的的信号灯 S1

2、=0用于控制售票员是否可以开门的信号灯 S2=04实验程序(有详细注释)/-/这是一个公共汽车的驾驶员与售票员之间的同步问题/一个进程模拟驾驶员,一个进程模拟售票员;/驾驶员的动作:启动车辆-驾驶车辆-到站停车/售票员的动作:关门-售票-开门;/售票员把车门关好后,驾驶员才能启动汽车;/当驾驶员在一个站把车子停稳后,售票员方能打开车门;/本程序采用System V的信号灯集实现两者的同步/ 2010.10.8/-#include #include #include #include #include #include union semun int val;/仅用于SETVAL命令 struc

3、t semid_ds *buf;/用于IPC_SET等命令 ushort *array;/用于SETALL等命令 ;/用于信号灯初始化/semid-信号灯的ID/val-欲设置的信号灯初值/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 sem

4、buf 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=./driv

5、er.c; int semid; int rrand; srand(int)time(0);/用于产生随机延时 semkey=ftok(pathname,45); if(semkey=-1) printf(Error:create a key error!n); exit(-1); semid=semget(semkey,2,IPC_CREAT | 0666); if(semid=-1) printf(Error:create semaphore error!n); exit(-1); seminit(semid,0,0);/对信号灯集的0号分量进行初始化 seminit(semid,0,1)

6、;/对信号灯集的1号分量进行初始化 if(fork()=0) /Create a process /子进程作为驾驶员进程 for(i=1;i10;i+) semdown(semid,0);/等待售票员关门 printf(Driver(pid:%d): Start the bus.n,getpid(); printf(Driver(pid:%d): Traveling.n,getpid(); rrand=1+(int)(6.0*rand()/(RAND_MAX+1.0);/产生一个(1-6)的随机数表示车辆的行驶时间 sleep(rrand); printf(Driver(pid:%d): Ar

7、rive at a station. stop!n,getpid(); semup(semid,1);/唤醒售票员 else /父进程作为售票员进程 for(j=1;j10;j+) printf(Conductor(pid:%d):Close all doors.n,getpid(); semup(semid,0);/唤醒司机 printf(Conductor(pid:%d):Ticketing.n,getpid(); semdown(semid,1); /等待汽车到站 printf(Conductor(pid:%d):Open all doors.n,getpid(); sleep(1); 5 实验结果及其分析输入程序:程序:编译:运行结果:6 实验小结完成本实验后,我对基本的额进程间的通信有了初步的了解。

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2