实验四-同步与互斥-Linux实验报告.docx

实验四-同步与互斥-Linux实验报告.docx

ID:55173951

大小:759.14 KB

页数:10页

时间:2020-04-30

实验四-同步与互斥-Linux实验报告.docx_第1页
实验四-同步与互斥-Linux实验报告.docx_第2页
实验四-同步与互斥-Linux实验报告.docx_第3页
实验四-同步与互斥-Linux实验报告.docx_第4页
实验四-同步与互斥-Linux实验报告.docx_第5页
资源描述:

《实验四-同步与互斥-Linux实验报告.docx》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、实验四同步与互斥【实验目的和要求】1、掌握进程(线程)的同步与互斥。2、掌握生产者消费者问题的实现方法。3、掌握多线程编程方法。【实验内容】实现生产者消费者问题1、有一个仓库,生产者负责生产产品,并放入仓库,消费者会从仓库中拿走产品(消费)。2、仓库中每次只能入一个(生产者或消费者)。3、仓库中可存放产品的数量最多10个,当仓库放满时,生产者不能再放入产品。4、当仓库空时,消费者不能从中取出产品。5、生产、消费速度不同。【实验原理】1、信号量mutex提供对缓冲池访问的互斥要求并初始化为1,信号量empty和full分别用来表示空缓冲项和满缓

2、冲项的个数,信号量empty初始化为n,信号量full初始化为0。2、定义如下结构及数据:  定义缓冲区内的数据类型:typedef int buffer_item; 缓冲区 :buffer_item buffer[BUFFER_SIZE];对缓冲区操作的变量:int in,out; 信号量mutex提供了对缓冲池访问的互斥要求:pthread_mutex_t mutex; 信号量empty和full分别表示空缓冲顶和满缓冲顶的个数:sem_t empty,full; 可以设定生产者的生产速度及消费者的消费速度 :int pro_speed,

3、con_speed;对缓冲区操作的自增函数:#define inc(k) if(k < BUFFER_SIZE) k = k+1;else k=03、并定义了如下实现问题的函数模块: 将生产的产品放入缓冲区: int insert_item(buffer_item item)      从缓冲区内移走一个产品: int remove_item(buffer_item *item)    生产者进程 :void *producer(void *param)         消费者进程:void *consumer(void *param)   

4、  生产者结构进程消费者结构进程【程序代码】//sx.c#include#include#include#include#include#defineinc(k)if(k

5、缓冲区操作的变量pthread_mutex_tmutex;//信号量mutex提供了对缓冲池访问的互斥要求sem_tempty,full;//信号量empty和full分别表示空缓冲顶和满缓冲顶的个数intpro_speed,con_speed;//可以设定生产者的生产速度及消费者的消费速度intinsert_item(buffer_itemitem){//将生产的产品放入缓冲区buffer[in]=item;printf("******insert缓冲池第%d号******",in);inc(in);}intremove_item(bu

6、ffer_item*item){//从缓冲区内移走一个产品*item=buffer[out];printf("******remove缓冲池第%d号******",out);inc(out);}void*producer(void*param){//生产者进程buffer_itemitem;intnum=0;while(1){sleep(rand()%(16-pro_speed));printf("******第%d次生产******",++num);printf("******等待empty信号******");sem_wa

7、it(&empty);printf("******等待解锁******");pthread_mutex_lock(&mutex);printf("******上锁,准备生产******");item=rand()%1000+1;printf("******生产产品%d*******",item);insert_item(item);printf("*******解锁******");printf("******第%d次生产结束*******",num);pthread_mutex_unlock(&mutex);sem_

8、post(&full);}}void*consumer(void*param){//消费者进程buffer_itemitem;intnum=0;while(1){s

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。