以下为《操作系统原理实验报告》的无排版文字预览,完整格式请下载
下载前请仔细阅读文字预览以及下方图片预览。图片预览是什么样的,下载的文档就是什么样的。
重庆人文***
实验报告
课程 操作系统原理
学院 计算机***
专业 计算机科学与技术
年级 2020级
学号 ***138
姓名 夏某某
指导教师 郭某某
重庆人文***计算机***
2022-2023学年第1学期
实验任务
生产者消费者问题仿真
姓名
夏某某
实验性质
基本操作 ( ) 验证性操作( )
综合性操作( ) 设计性操作(()
日期
11月7日-11月14日
成绩
教师评价:
实验预习( ) 实验操作( ) 实验结果( ) 实验报告( )
教师签名:
实验目的与要求
1. 掌握PV操作基本方法
2. 掌握进程同步与互斥的基本方法
3. 实现有限缓冲区的生产者与消费者进程(线程)
4. 设计并实现基本界面
二、实验内容
1. 生产者进程(线程)与消费者进程(线程)共享的缓冲区为可存放10个整数。生产者每次向缓冲区写入1个数据,消费者每次从缓冲区取走1个数据。生产者与生产者互斥,消费者与消费者互斥,生产者与消费者互斥,生产者与消费者同步完成对缓冲区访问。
2. 程序功能
消费者发送请求,生产者进行生成,再存储在缓冲区,消费者消费缓冲区的产品
3. 程序流程图
/
三、记录与数据处理
1. 程序代码
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
int buffsize=10;//设定buffsize大小
int buffer[10]={0};//初始化缓冲区
sem_t s; //互斥信号量
sem_t n; //计数 缓冲区数据量
sem_t e; //计数 缓冲区空余数据量
int in=0;
int out=0;
//生产者
void * producer()
{
while(1)
{
srand(time(0));//初始化种子,每次生成不同的数
int data=rand()%11;//随机生成数
sem_wait(&e);
sem_wait(&s);
if(buffer[in]!=0)
{
in++;
}
buffer[in]=data;
printf("%d位置input%d\n",in,data);
in=(in+1)%10;
sem_post(&s);
sem_post(&n);
sleep(rand()%3);
}
}
//消费者
void * consumer()
{
while(1)
{
sem_wa 内容过长,仅展示头部和尾部部分文字预览,全文请查看图片预览。 pthread_join(pid4,NULL);
pthread_join(pid5,NULL);
//销毁信号量
sem_destroy(&s);
sem_destroy(&e);
sem_destroy(&n);
//退出
exit(0);
}
2. 程序界面
/
3. 测试数据
点击运行能够正常显示生产者每次向缓冲区写入数据,消费者每次从缓冲区取走数据。
四、结果及分析
1. 测试结论
能够正常实现进程同步与互斥的基本方法和有限缓冲区的生产者与消费者进程(线程)
2. 遇到的问题及解决方法
[文章尾部最后300字内容到此结束,中间部分内容请查看底下的图片预览]
以上为《操作系统原理实验报告》的无排版文字预览,完整格式请下载
下载前请仔细阅读上面文字预览以及下方图片预览。图片预览是什么样的,下载的文档就是什么样的。