Linux实验八-多线程编程

Linux实验八-多线程编程

ID:46579760

大小:124.73 KB

页数:6页

时间:2019-11-25

Linux实验八-多线程编程_第1页
Linux实验八-多线程编程_第2页
Linux实验八-多线程编程_第3页
Linux实验八-多线程编程_第4页
Linux实验八-多线程编程_第5页
资源描述:

《Linux实验八-多线程编程》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、实验六Linux下的多线程程序设计一、实验目的1、通过编写经典的“生产者消费者”问题,进一步熟悉Linux中多线程编程2、掌握用信号量处理线程间的同步互斥的方法。二、实验设备装有RedHatEnterpriseLinux操作系统的PC机三、实验内容“生产者消费者”问题描述如下:有一个有限缓冲区和两个线程:生产者和消费者。他们分别把产品放入缓冲区和从缓冲区中拿走产品。生产者在缓冲区满时必须等待,消费者在缓冲区空时必须等待。同时,要求生产者和消费者不能同时访问缓冲区。它们之间的关系如图1所示:图1生产者消费者问题描述这里要求用有名管道

2、来模拟有限缓冲区,用信号量来解决生产者消费者问题中的同步和互斥问题。1、信号量的考虑可以使用3个信号量,其中两个信号量avail和full分别用于解决生产者和消费者线程之间的同步问题,mutex是用于这两个线程之间的互斥问题。其中avail初始化为N(有界缓冲区的空单元数),mutex初始化为1,full初始化为0。2、流程图“生产者消费者”问题的流程流程图如图2所示。3、编写代码实验代码中采用的有界缓冲区拥有3个单元,每个单元为5个字节。为了尽量体现每个信号量的意义,在程序中生产过程和消费过程随机(采取0-5s的随机时间间隔)进

3、行的,而且生产者的速度比消费者的速度平均快两倍左右。生产者一次生产一个产品(向缓冲区中放入“hello”字符串),消费者一次消费一个产品。四、实验步骤1、新建目录存放所设计的程序。cd/homemkdirexp8cdexp82、编写“生产者消费者”问题的程序。输入命令viproducer-customer.c启动vi,然后,按i进入插入状态,并输入源程序。最后,按ESC返回到底行模式,并按:wq存盘退出。3、编译、调试上述程序。gccproducer-customer.c–oproducer-customer–lpthread4、

4、新建一个终端:桌面点右键选择“新建一个终端”运行./producer-customer5、观察实验结果。图2.“生产者消费者”问题的流程流程图五、参考程序清单/*producer-customer.c*/#include#include#include#include#include#include#include#include#include

5、>#include#defineMYFIFO"myfifo"/*缓冲区有名管道的名字*/#defineBUFFER_SIZE3/*缓冲区的单元数*/#defineUNIT_SIZE5/*每个单元的大小*/#defineRUN_TIME30/*运行时间*/#defineDELAY_TIME_LEVELS5.0/*周期的最大值*/intfd;time_tend_time;sem_tmutex,full,avail;/*三个信号量*//*生产者线程*/void*producer(void*arg){intreal

6、_write;intdelay_time=0;while(time(NULL)

7、,UNIT_SIZE))==-1){if(errno==EAGAIN){printf("TheFIFOhasnotbeenreadyet.Pleasetrylater");}}else{printf("Write%dtotheFIFO",real_write);}/*V操作信号量full和mutex*/sem_post(&full);sem_post(&mutex);}pthread_exit(NULL);}/*消费者线程*/void*customer(void*arg){unsignedcharread_buffer[U

8、NIT_SIZE];intreal_read;intdelay_time;while(time(NULL)

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

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

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