实验四-同步与互斥-Linux实验报告(共10页).docx
《实验四-同步与互斥-Linux实验报告(共10页).docx》由会员分享,可在线阅读,更多相关《实验四-同步与互斥-Linux实验报告(共10页).docx(10页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上实验四 同步与互斥 【实验目的和要求】1、掌握进程(线程)的同步与互斥。2、掌握生产者消费者问题的实现方法。3、掌握多线程编程方法。【实验内容】实现生产者消费者问题1、有一个仓库,生产者负责生产产品,并放入仓库,消费者会从仓库中拿走产品(消费)。2、仓库中每次只能入一个(生产者或消费者)。3、仓库中可存放产品的数量最多10个,当仓库放满时,生产者不能再放入产品。4、当仓库空时,消费者不能从中取出产品。5、生产、消费速度不同。【实验原理】1、 信号量mutex提供对缓冲池访问的互斥要求并初始化为1,信号量empty和full分别用来表示空缓冲项和满缓冲项的个数,信号量e
2、mpty初始化为n,信号量full初始化为0。2、定义如下结构及数据:定义缓冲区内的数据类型:typedefintbuffer_item;缓冲区:buffer_itembufferBUFFER_SIZE;对缓冲区操作的变量:intin,out;信号量mutex提供了对缓冲池访问的互斥要求:pthread_mutex_tmutex;信号量empty和full分别表示空缓冲顶和满缓冲顶的个数:sem_tempty,full;可以设定生产者的生产速度及消费者的消费速度:intpro_speed,con_speed;对缓冲区操作的自增函数:#defineinc(k)if(kBUFFER_SIZE)k=
3、k+1;elsek=03、并定义了如下实现问题的函数模块:将生产的产品放入缓冲区:intinsert_item(buffer_itemitem)从缓冲区内移走一个产品:intremove_item(buffer_item*item)生产者进程:void*producer(void*param)消费者进程:void*consumer(void*param)生产者结构进程 消费者结构进程【程序代码】/sx.c#include#include#include#include#include#define inc(k) if(kBUFFER_SIZE) k=k+1;else k=0#define BU
4、FFER_SIZE 10/缓冲区的大小typedef int buffer_item;/定义缓冲区内的数据类型buffer_item bufferBUFFER_SIZE;/缓冲区int in,out;/对缓冲区操作的变量pthread_mutex_t mutex;/信号量mutex提供了对缓冲池访问的互斥要求sem_t empty,full;/信号量empty和full分别表示空缓冲顶和满缓冲顶的个数int pro_speed,con_speed;/可以设定生产者的生产速度及消费者的消费速度int insert_item(buffer_item item)/将生产的产品放入缓冲区bufferi
5、n=item;printf(*insert缓冲池第%d号*n,in);inc(in);int remove_item(buffer_item *item)/从缓冲区内移走一个产品*item = bufferout;printf(*remove缓冲池第%d号*n,out);inc(out);void *producer(void *param)/生产者进程buffer_item item;int num = 0;while(1)sleep(rand()%(16-pro_speed);printf(n*第%d次生产*n,+num);printf(*等待empty信号*n);sem_wait(&em
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 同步 Linux 报告 10
限制150内