




已阅读5页,还剩5页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验3读者/写作者的问题与过程同步3.1实验目的了解临界区和过程排斥的概念,了解如何通过信号量和PV操作实现过程排斥。3.2实验要求在linux环境中创建控制台应用程序,并在运行时创建n个线程(或进程)。 其中包括读者和撰稿人线程,可以根据事先设计的测试数据进行读写。 请通过信号量和PV操作实现读者/写入者的问题。读者/撰稿人的问题描述如下:有许多进程共享的数据区。 此数据区可以是文件、主要存储区域(如数组或变量)或一组处理器寄存器。 包括只读取此数据区的过程(reader )和只将数据写入数据区的过程(writer )。 以下,假设共享数据区域是文件。 这些读者和写入者必须满足以下条件才能使用数据区:读-读-读-写-写独占。 这些条件具体如下:(1)任意数量的读取过程可以同时读取该文件(2)一次只能写入一个写入程序(3)在写入程序写入文件的情况下,禁止读取程序或写入程序对文件进行访问(4)在写入程序执行写入操作之前,终止所有现有的写入者或读者。 这说明在读者阅读文件时,执笔者不允许写文件。读者-撰稿人问题有三种解决方案:1 .读者优先除了以上四条规则外,还添加了读者优先的规则,当读者正在阅读文档时,此后到达的读者和撰写者必须首先满足读者并封锁撰写者。 这表明,只要有一位读者活跃,之后的读者就可以访问文件,打火机可能会等待很长时间,导致打火机饿死。2、打火机优先除了上述4条规则外,还追加了读者和打火机同时等待时,首先要满足打火机的打火机优先规则。 某撰稿人宣布想写文件时,不允许新读者访问文件。3 .无优先事项除了上述4条规则外,没有规定读写的优先级,谁先等就用文件。3.3实验步骤3.3.1算法分析1 .错误的解法图3-1错误的解法semaphore r_w_w=1;reader (); 1111P(r_w_w )看文件V(r_w_w )以下称为writer (); 开店P(r_w_w )写文件V(r_w_w )以下称为某个学生可将文件看作临界资源,利用临界资源的代码构成临界区域,为了管理临界区域,可设定排他信号量r_w_w,在读写之前执行P(r_w_w ),然后执行V(r_w_w ),由此获得图3-1中所示的算法描述。此方法可满足读-写排他和写-写排他,但如果不满足读-读授权,则只要某个读者正在读取文件,其它读者就会被阻止。仅凭排他信号量无法解决读者/写入者的问题,需要引入计数器来计数读者。2、读者优先如何纠正上述解法中存在的错误?实际上,并非所有读者都需要对一组依次到达的读者执行P(r_w_w )和V(r_w_w )。 在这些读者中,仅最初到达的读者需要执行P(r_w_w ),与写入者比较对文件的访问权,如果该P(r_w_w )成功,则获得对文件的访问权,且其它读者最后退出临界区域,以使得可以直接访问该文件要记录读取文件的读者数,必须设置整数变量readercount。 readercount在每次读者到达时加1,退出时减1。只要一个读者读取文件,写入者就不能写入文件,因此只有在readercount=0时,即读取者没有读取文件的情况下,读取者才需要执行P(r_w_w )操作。 如果P(r_w_w )的操作成功,读者可以读取文件,相应地读取器计数1。 同样,只有当readercount减去1后的值为0时,才需要执行V(r_w_w )操作将文件写入写入器。 另外,由于readercount是能够访问多个读取者的临界资源,所以应设定互斥信号量readercount_mutex。 每个读者在访问readercount之前执行P(readercount_mutex ),然后执行V(readercount_mutex )。通过上述分析,可以获得图3-2所示的算法描述,其中,数字表示对应于各字符的行号。图3-2读者优先算法01 semaphore r_w_w=1;02 semaphanorereadercount _ mutex=1;03 int readercount=0;04读取器() () 222105 P(readercount_mutex )06 if (读取计数=0) p (r _ w _ w )07读取计数;08 V(readercount_mutex )读09文件reader count _ mutex (读取计数器计数器)11读者计数- -;12if (读取计数=0) v (r _ w _ w )13 v读取器计数器14 )1516 writer () 222222222222222222217 P(r_w_w )写十八份文件19 V(r_w_w )20 )3、打火机优先通过增加信号量并修改上述程序,能够得到写入者优先算法。 为了实现书写者优先算法,书写者和读者必须分别排列,最初的读者和其他的读者也必须分别排列。 这需要三个队列。 一个是打火机排列的地方,另一个是第一个读者排列的地方,三个是其他读者排列的地方。 因此,需要设置r_w_w、first_reader_wait和reader_wait这三个信号量。 当一个撰稿人声明要写文档时,如果first_reader_wait阻止了一个读者从新读者开始就可以在first_reader_wait中排队,那么一个撰稿人会阻止另一个读者写文档除非有活跃的打火机和打火机队伍,否则阻止新到达的读者。 要记录声明的写入程序数,必须设置一个整数写入程序计数,表示要写入声明文件的写入程序数。 由于写入者到达时读者不被允许读取,因此只有在写入者表示写入者没有写入的写入者计数=0的情况下才需要执行P(first_reader_wait )操作,如果操作成功,则写入者执行P(r_w_w )来写入文件的权利其他的撰写人不需要向读者宣言,可以直接执行P(r_w_w )来竞争写文件的权利。 同样,只有当writercount减去1后值变为0时,才需要执行V(first_reader_wait )操作来调用第一个被阻止的读者。 另外,writercount是多个写入者可以访问的极限资源,因此必须设置互斥信号量writer_mutex。4 .无优先事项除了读取者优先时所需的信号量r_w_w和readercount_mutex之外,还需要设定读取者和写入者排列的信号量wait。 读者和撰稿人都排在wait队列里。 如果读者正在读文件,第一个打火机就是r_w_w,其他打火机和读者就会被wait阻止。如果一个打火机正在写文件,其他打火机和读者都会被wait阻止。图3-3示出了不优先的算法。图3-3无优先级算法01 semaphore r_w_w=1;02 semaphore wait=1;03 semaphanorereadercount _ mutex=1;04 int readercount=0;05reader()()1106 P(wait )07 P(readercount_mutex )08读取计数=0) p (r _ w _ w )09读取计数;10 v (读取计数mutex )11伏特12读文件reader count _ mutex (读取器计数器)14读取计数- -;15if (读取计数=0) v (r _ w _ w )16 v读取器计数器十七)18writer (); 开店19 p战斗机20 P(r_w_w )21写文件22 V(r_w_w )23伏特24 )3.3.2程序功能和接口设计该程序采用简单的控制台应用程序界面,在主界面中显示程序的功能。 该计划的职能包括:1 .示范读者优先算法2 .演示者优先算法3 .表示没有优先算法4 .退出。3.3.3函数设计实现读者/写入者问题的源程序名为reader_and_writer.cpp。 这个程序包含了10个函数。 这些函数可以分为四组。 各组中包含的函数及其功能如图3-4所示。组织包含函数函数功能一个main ()出现主菜单,接受用户选择并执行相应的功能。二RF_reader_thread ()RF_writer_thread ()reader_first ()读者优先算法的读者线程函数读者优先算法的写入器线程函数读者优先算法的初始化函数:创建10个线程,等待结束三WF_reader_thread ()WF_writer_thread ()writer_first ()写入者优先算法的读者线程函数写入程序优先算法的写入程序线程函数写入者优先演算法的初始化函数:建立10个执行绪并等待结束四FIFO_reader_thread ()FIFO_writer_thread ()first_come_first_serverd ()无优先算法的读者线程函数无者优先算法的写入器线程函数无人值守优先级算法初始化函数:创建10个线程并等待其完成图3-4函数功能概要在程序的开始部分定义了宏MAX_THREAD,其示出了用程序制作的线程数。 测试数据的结构还定义了TEST_INFO,该结构包含三个数据项:线程名称和线程名称。提交请求的时间点操作持续时间。 然后,定义起到以下作用的全局变量数组test_data包含10个线程的测试数据整数read_count记录一段时间内同时读取文件的线程数整数write_count记录在仅用于写入者优先级算法的一段时间内发出写请求的线程数CS_DATA是用于保护文件并实现文件读取/写入排他(相当于算法描述中的r_w_w )的临界区域变量互斥h_mutex_read_count用于保护整数read_count以确保多个读者对read_count的互斥访问互斥h_mutex_write_count用于保护整数write_count并确保多个写入器对write_count的互斥访问,该互斥仅用于写入器优先级算法互斥h_mutex_first_reader_wait和h_mutex_reader_wait仅用于写入者优先级算法,并且当写入者正在写入文档时,提出读取请求的第一个读取者块到h_mutex_first_reader_wait当仅使用无优先级算法的排他h_mutex_wait且使用了文件时,后续读请求和写请求被顺序阻止到h_mutex_wait。3.3.4见源程序3.3.4.1 Linux上的参考源程序编译命令gcc creader _ and _ writer.CPPadobe reader _ and _ writer.olcurseslpthread工艺列表#include#include#include#include#include#define MAX_THREAD 10typedef structchar thread_name3;unsigned int require_moment;无符号int persist _ time;TEST_INFO;test _ info test _ data max _ thread =请参见r1,0,15,r2,1,15,w1 ,3,3,r3,4,2,w2 ,5,6,w3 ,6,10,r4,7,8,r5,9,2,w4,10,18,w5 ,12,2 int read_count=0;int write_count=0;pthread_mutex_t CS_DATA;pthread _ mutex _ TD _ mutex _ read _ count;pthread _ mutex _ TD _ mutex _ write _ count;pthread _ mutex _ TD _ mutex _ reader _ wait;pthread _ mutex _ TD _ mutex _ first _ reader _ wait;pthread_mutex_t h_mutex_wait;void * RF _ reader _ thread (void *数据) char thread_name3;strcpy(thread_n
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 校文艺部笔试题目及答案
- 时间到认识课件
- 时尚表演基础知识培训内容课件
- 人教版四年级上册第五单元5.1《平行与垂直》课时练(含答案)
- 高一英语必修一Unit 2 Travelling around课时同步练习(Listening and Talking)(含答案)
- 项目成本控制方案编制与实施框架
- 小青蛙呱呱系列童话呱呱撒谎了750字7篇范文
- 营销活动效果评估报告模板业绩评估标准版
- 纪念九八一事变的课件
- 纪委监委应急知识培训课件
- 北京地铁桥隧结构运维监测技术应用
- 充电桩工程施工方案方案
- 实验室生物安全管理手册
- 国自然申请攻略
- 生产车间7s管理成果汇报
- 新教师德育工作培训
- 代建管理制度
- 中蜂饲养管理与常见病防治
- 小学数学作业设计培训
- 2024年05月辽宁中国工商银行辽宁分行校园招考笔试历年参考题库附带答案详解
- 供应商准入培训
评论
0/150
提交评论