



全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
南昌大学实验报告 -(2)编程模拟进程间的同步和互斥一、实验目的通过实验加强对进程同步和互斥的理解,并掌握进程(线程)的创建和调用方法。学会使用信号量解决资源共享问题。学生可以自己选择在Windows或Linux系统下编写。二、实验内容1以下为Linux系统下参考程序,请编译、运行并观察程序的输出,并分析实验结果,写出实验报告。#include#include#include#include#include#include#include#define NUM_PROCS 5#define SEM_ID 250#define FILE_NAME /tmp/sem_aaa#define DELAY 4000000void update_file(int sem_set_id, char *file_path, int number)struct sembuf sem_op;FILE *file; /建立一个文件指针/等待信号量的数值变为非负数,此处设为负值,相当于对信号量进行P操作sem_op.sem_num=0;sem_op.sem_op=-1;sem_op.sem_flg=0;semop(sem_set_id,&sem_op,1);/*操作一组信号sem_set_id是进程的标识符,sem_op是结构指针。sem_op:如果其值为正数,该值会加到现有的信号内含值中。通常用于释放所控资源的使用权;如果sem_op的值为负数,而其绝对值又大于信号的现值,操作将会阻塞,直到信号值大于或等于sem_op的绝对值。通常用于获取资源的使用权;如果sem_op的值为0,则操作将暂时阻塞,直到信号的值变为0。*/写文件,写入的数值是当前进程的进程号file=fopen(file_path,w); /写文件,若成功者返回文件起始地址;否则0if(file)/临界区fprintf(file,进程%dn,number); /将当前的进程号写入*file处printf(进程%dn,number); /将当前的进程号输到标准输出里。fclose(file); /关闭文件/发送信号,把信号量的数值加1,此处相当于对信号量进行V操作sem_op.sem_num=0;sem_op.sem_op=1; /信号量加1sem_op.sem_flg=0;semop(sem_set_id,&sem_op,1);/子进程写文件void do_child_loop(int sem_set_id,char *file_name)pid_t pid=getpid(); /取得目前进程的识别码,返回当前的进程的标识符int i,j;for(i=0;i3;i+)update_file(sem_set_id,file_name,pid);for(j=0;j4000000;j+); /延时int main(int argc,char *argv)int sem_set_id; /信号量集的IDunion semun sem_val; /信号量的数值,用于semctl()int child_pid;int i;int rc;/ 建立信号量集,ID是250,其中只有一个信号量sem_set_id=semget(SEM_ID,1,IPC_CREAT|0600);if(sem_set_id=-1) /如果调用失败,输出错误类型,强制退出程序perror(main: semget); exit(1);/把第一个信号量的数值设置为1sem_val.val=1;rc=semctl(sem_set_id,0,SETVAL,sem_val);if(rc=-1) /测试是否成功调用semclt()函数perror(main:semctl);exit(1);/建立一些子进程,使它们可以同时以竞争的方式访问信号量for(i=0;iNUM_PROCS;i+)child_pid=fork(); /创建子进程。如果成功子进程返回0,父进程返回子进程 /ID。否则返回-1switch(child_pid)case -1: perror(fork);case 0: /子进程do_child_loop(sem_set_id,FILE_NAME); /子进程写文件exit(0); /正常退出default: /父进程接着运行break;/等待子进程结束for(i=0;iNUM_PROCS;i+)int child_status;wait(&child_status); /成功就返回子进程识别码PIDprintf(main:were donen);fflush(stdout); /刷新标准输出缓冲区的输出缓冲区里的东西,打印到标准输出 /设备上return 0;三、实验要求1、 linux操作系统2、 Windows操作系统四、主要实验步骤linux操作系统下的操作步骤: gedit semaphore.c (编辑程序)gcc o semaphore semaphore.c (编译、链接程序
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025至2030中国原始曲酸市场运行状况及未来前景动态研究研究报告
- 2025至2030中国半旋转叶片驱动行业发展研究与产业战略规划分析评估报告
- 2025至2030中国办公文具行业市场深度研究及发展前景投资可行性分析报告
- 温州消防知识培训课件
- 2025至2030中国儿童室内游乐园行业发展研究与产业战略规划分析评估报告
- 2024年家庭教育指导咨询师试题及答案
- 渣土车基本知识培训课件
- 文化传媒公司品牌推广全案策划
- 网红健康养生指导创新创业项目商业计划书
- 电力市场交易创新创业项目商业计划书
- 国有资产资产委托管理协议书范本
- 《品牌培训知识》课件
- 《机械制图》职业院校机械类专业全套教学课件
- 充电桩巡查记录表
- 人教版六年级数学上册第一单元测试卷
- 浙江省镇海中学高三一诊考试新高考物理试卷及答案解析
- JT-T-155-2021汽车举升机行业标准
- 化妆品质量意识培训大纲
- 八下单词表(Unit 1-10)大全
- YS-T 650-2020 医用气体和真空用无缝铜管
- JC-T 564-2000 纤维增强硅酸钙板
评论
0/150
提交评论