欢迎来到天天文库
浏览记录
ID:13149100
大小:281.00 KB
页数:16页
时间:2018-07-20
《读者-写者问题(reader-writer problem)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、学号:课程设计题目用多线程同步方法解决读者-写者问题(Reader-WriterProblem)学院计算机科学与技术学院专业软件工程班级姓名指导教师2010年6月日《操作系统》课程设计说明书目录目录1课程设计任务书1正文21.设计目的与要求21.1设计目的21.2设计要求22.设计思想及系统平台22.1设计思想22.2系统平台及使用语言33.详细算法描述34.源程序清单65.运行结果与运行情况96.调试过程117.总结12本科生课程设计成绩评定表130《操作系统》课程设计说明书课程设计任务书学生姓名:专业班级:指导教师:工作单位:计算机科学与技术学院题目:用多线程同步方法解决读者-写
2、者问题(Reader-WriterProblem)初始条件:1.操作系统:Linux2.程序设计语言:C语言3.设有20个连续的存储单元,写入/读出的数据项按增序设定为1-20这20个字符。要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)1.技术要求:1)为每个读者/写者产生一个线程,设计正确的同步算法2)每个读者/写者对该存储区进行操作后,即时显示该存储区的全部内容、当前指针位置和读者/写者线程的自定义标识符。。3)读者应有3个以上,写者应有有两个以上。4)多个读者/写者之间须共享对存储区进行操作的函数代码。2.设计说明书内容要求:1)设计题目与要求
3、2)总的设计思想及系统平台、语言、工具等。3)数据结构与模块说明(功能与流程图)4)给出用户名、源程序名、目标程序名和源程序及其运行结果。(要注明存储各个程序及其运行结果的主机IP地址和目录。)5)运行结果与运行情况(提示:(1)连续存储区可用数组实现。(2)编译命令可用: cc-lpthread-o 目标文件名 源文件名(3)多线程编程方法参见附件。)3.调试报告:1)调试记录2)自我评析和总结上机时间安排:18周一~五08:0-12:00指导教师签名:年月日系主任(或责任教师)签名:年月日11正文1.设计目的与要求1.1设计目的通过研究Linux的线程机制和信号量实现读
4、者写者问题(Reader-WriterProblem)的并发控制。1.2设计要求1)为每个读者/写者产生一个线程,设计正确的同步算法2)每个读者/写者对该存储区进行操作后,即时显示该存储区的全部内容、当前指针位置和读者/写者线程的自定义标识符。3)读者应有3个以上,写者应有有两个以上。4)多个读者/写者之间须共享对存储区进行操作的函数代码。2.设计思想及系统平台2.1设计思想为实现reader与writer线程间在读或写时的互斥设置一个互斥信号量writer_mutex。另外,再设置一个整形变量reader_counter表示正在读的线程数目。由于只有一个reader线程在读,便不允
5、许writer线程去写。因此,仅当reader_counter=0,表示尚无reader线程在读时,reader线程才需要执行wait(writer_mutex)操作。若wait(writer_mutex)操作成功,reader线程便可以去读,相应的,做reader_counter+1操作。同理,仅当reader线程在执行reader_counter减1操作后其值为0时,才必须执行signal(writer_mutex)操作,以便让writer线程写。reader_counter是一个可被多个reader线程访问的临界资源,因此,也应该为它设置一个互斥信号量reader_mutex。
6、11除此之外,各线程也共享输出文件,特别是reader线程,有可能多个reader线程同时使用输出文件。为避免输出混乱,也应该为其设置一个互斥信号量print_mutex。2.2系统平台及使用语言本课程设计在Linux操作系统下,使用C语言完成。用到的工具主要有GCC编译器和VI编辑器。3.详细算法描述本程序解决读者——写者问题的大致算法思想前一部分已描述,此外,本程序通过alarm()设置程序的运行时间,一旦超时,将设置超时变量timeout=1。一旦设置超时变量,所有的读者线程和写者线程将不再进行下一轮的读/写操作。每个线程执行完一轮的读/写操作,将休息一会后继续进行下一轮的读/
7、写操作,直到超时变量为1。本程序的读/写操作都是随机进行的。共享数据:Semaphorewriter_mutex=1;Semaphorereader_mutex=1;Semaphoreprint_mutex=1;intreader_counter=0;Writer线程的处理函数:while(1){Wait(writer_mutex);Reading;Signal(writer_mutex);if(timeout==1)break;sleep();}11Wr
此文档下载收益归作者所有