实验题目: linux下利用互斥实现线程访问共享资源? 5
一、实验题目:linux下利用互斥实现线程访问共享资源二、实验目的:掌握线程创建和终止,加深对线程和进程概念的理解,会用同步与互斥方法实现线程之间的通信。三、实验内容事先...
一、实验题目: linux下利用互斥实现线程访问共享资源
二、实验目的:掌握线程创建和终止,加深对线程和进程概念的理解,会用同步与互斥方法实现线程之间的通信。
三、实验内容
事先了解操作系统中经典的生产者-消费者问题,安装linux虚拟机(可以用virtualbox或者vmware软件)。在linux下创建三个生产者线程(P1,P2,P3)和一个消费者线程(C1),生产者和消费者线程共享一个长度为512字节的环型公共缓冲区,生产者向缓冲区写入消息,消费者从缓冲区中取走消息显示到屏幕。只要缓冲区未满,生产者可将消息送入缓冲区;只要缓冲区未空,消费者可从缓冲区取走一个消息。
每个消息具下列结构格式:
消息类型(1个字节:0为大写字母,1为小写字母,2为数字字母),消息内容(26或10个字节,内容为26个大写字母或者26个字写字母或者10个数字字符)。
每个生产者每隔0.15秒生产一个消息加入缓冲区,并把消息产生时间和内容记录在一个文本文件中。P1每次生产的数据为26个大写字母, P2每次生产的数据为26个小写字母,P3每次生产的数据为10个阿拉伯数字。
消费者C1每隔0.1秒读取缓冲区中的一个消息并将消息内容显示到屏幕上。
环型公共缓冲区读写规则:生产者进程和消费者进程读写缓冲区前必须先申请互斥锁,操作完成后释放互斥锁。生产者进程获得互斥锁后,若缓冲区满或者空间不够放一条记录则释放锁。消费者进程获得互斥锁后,若缓冲区空则释放锁。环型缓冲区当读写到最尾部后则转到头部继续读写。
用两种方法(不采线程用互斥和采用线程互斥技术)编写上述功能的程序,对比两种程序运行结果有何区别?不采线程用互斥时存在什么问题?
备注:编程中用到的函数
创建线程函数:pthread_create
互斥锁初始化:pthread_mutex_init
互斥锁加锁:pthread_mutex_lock
互斥锁解锁:pthread_mutex_unlock
四、实验要求:
每人完成一份大作业实验报告。报告分设计思想、数据定义、处理流程、源程序、运行结果截图、设计体会等部分。
1)给出数据定义和详细说明;
2)给出实现思想和设计流程;
3)调试完成源程序;
4)屏幕观察运行结果;
5)总结自己的设计体会; 展开
二、实验目的:掌握线程创建和终止,加深对线程和进程概念的理解,会用同步与互斥方法实现线程之间的通信。
三、实验内容
事先了解操作系统中经典的生产者-消费者问题,安装linux虚拟机(可以用virtualbox或者vmware软件)。在linux下创建三个生产者线程(P1,P2,P3)和一个消费者线程(C1),生产者和消费者线程共享一个长度为512字节的环型公共缓冲区,生产者向缓冲区写入消息,消费者从缓冲区中取走消息显示到屏幕。只要缓冲区未满,生产者可将消息送入缓冲区;只要缓冲区未空,消费者可从缓冲区取走一个消息。
每个消息具下列结构格式:
消息类型(1个字节:0为大写字母,1为小写字母,2为数字字母),消息内容(26或10个字节,内容为26个大写字母或者26个字写字母或者10个数字字符)。
每个生产者每隔0.15秒生产一个消息加入缓冲区,并把消息产生时间和内容记录在一个文本文件中。P1每次生产的数据为26个大写字母, P2每次生产的数据为26个小写字母,P3每次生产的数据为10个阿拉伯数字。
消费者C1每隔0.1秒读取缓冲区中的一个消息并将消息内容显示到屏幕上。
环型公共缓冲区读写规则:生产者进程和消费者进程读写缓冲区前必须先申请互斥锁,操作完成后释放互斥锁。生产者进程获得互斥锁后,若缓冲区满或者空间不够放一条记录则释放锁。消费者进程获得互斥锁后,若缓冲区空则释放锁。环型缓冲区当读写到最尾部后则转到头部继续读写。
用两种方法(不采线程用互斥和采用线程互斥技术)编写上述功能的程序,对比两种程序运行结果有何区别?不采线程用互斥时存在什么问题?
备注:编程中用到的函数
创建线程函数:pthread_create
互斥锁初始化:pthread_mutex_init
互斥锁加锁:pthread_mutex_lock
互斥锁解锁:pthread_mutex_unlock
四、实验要求:
每人完成一份大作业实验报告。报告分设计思想、数据定义、处理流程、源程序、运行结果截图、设计体会等部分。
1)给出数据定义和详细说明;
2)给出实现思想和设计流程;
3)调试完成源程序;
4)屏幕观察运行结果;
5)总结自己的设计体会; 展开
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询