读者写者问题实验报告3


    

    学 号:


    课 程 设 计




    题 目
    实现读者写者 (ReaderWriter Problem) 问题
    学 院
    计算机科学技术
    专 业
    软件工程
    班 级
    软件
    姓 名

    指导教师




    2010

    X

    X



    目 录

    1.概述 …………………………………………4
    11设计题目 ………………………………………………4
    12设计目 ………………………………………………4
    13设计时间 ………………………………………………4
    14开发环境 ………………………………………………4
    15设计求 ………………………………………………4
    2.数结构模块说明 ………………………5
    21设计概述 ……………………………………………5
    22设计流程图 ……………………………………………6
    3.具体编程实现 ………………………………7
    4.运行结果测试 ……………………………8
    5 课程设计总结体会 ………………………11
    6.参考文献 ……………………………………11










    课程设计务书
    学生姓名: 专业班级: 软件
    指导教师: 工作单位: 计算机科学技术学院
    题目 实现读者写者 (ReaderWriter Problem) 问题
    初始条件:
    1 操作系统:Linux
    2 程序设计语言:C语言
    3 设20连续存储单元写入读出数项增序设定1-2020字符
    求完成务 (包括课程设计工作量技术求说明书撰写等具体求)
    1.技术求:
    1)读者/写者产生线程设计正确步算法
    2)读者写者该存储区进行操作时显示该存储区全部容前指针位置读者写者线程定义标识符
    3)读者应3写者应两
    4)读者写者间须享存储区进行操作函数代码
    2. 设计说明书容求:
    1)设计题目求
    2)总设计思想系统台语言工具等
    3)数结构模块说明(功流程图)
    4)运行结果运行情况
    (提示 (1)连续存储区数组实现
    (2)编译命令:     cc lpthread o  目标文件名  源文件名
    (3)线程编程方法参见附件)
    3 调试报告:
    1) 调试记录
    2) 评析总结

    机时间安排:
    18周 ~ 五 08:0 - 12:00



    指导教师签名: 年 月 日
    系(责教师)签名: 年 月 日

    实现读者写者 (ReaderWriter Problem) 问题
    1 概述

    11 设计题目
    实现读者写者 (ReaderWriter Problem) 问题
    12 设计目
    通操作系统核实现代码阅读修改设计理解掌握复杂操作系统工作原理
    通研究Linux线程机制信号量实现读者写者(ReaderWriter)问题发控制
    13设计时间
    消化资料系统调查 1天
    系统分析 1天
    总体设计实施计划 2天
    撰写课程设计报告书 1天
    第18周周周五
    14开发环境
    次课程设计操作系统:Linux编程语言C语言
    15 设计求
    1)读者/写者产生线程设计正确步算法
    2)读者写者该存储区进行操作时显示该存储区全部容前指针位置读者写者线程定义标识符
    3)读者应3写者应两
    4)读者写者间须享存储区进行操作函数代码








    2数结构模块说明

    21设计概述

    谓读者写着问题指保证writer进程必须进程互斥访问享象步问题
    读者写者问题样描述群写者群读者写者写书读者读书读者时读书写者写书读者必写者优先说读者写者时提出请求时读者优先读者提出请求时需互斥操作外需信号量S前否操作
    信号量机制支持道程序发操作系统设计中解决资源享时进程间步互斥重机制读者写者机制典范例
    记录型信号量解决读者—写者问题信号量机制增加限制允许RN读者时读引入信号量L赋予初值RN通执行wait(L11)操作控制读者数目读者进入时执行wait(L11)操作L值减1RN读者进入读L便减0第RN+1 读者进入读时必然会wait(L11)操作失败堵塞利信号量解决读者—写者问题描述:
    Var RN integerLmxsemaphore RN1
    Begin
    Parbegin
      Reader begin
              Repeat
               Swait(L11)
               Swait(mx10)
                     
               Perform reader operation
               Ssignal(L1)
     Until false
      End
    Writer :begin
             Repeat
    Swait(mx 11lRN0)
    Perform writer operation
    Ssignal(mx1)
    Until false
    End
    Parend
    End
      中Swait(mx10)语句起着开关作Writer进程进入mx1reader进程进入读旦Writer进程进入写时MX0reader进程法进入读Swait(mx 11lRN0)语句表示仅Write进程写(mx1)reader进程读(LRN)时writer进程进入界区写
    22设计流程图


    程序()
    读者()
    写者()
    控()

    3 具体编程实现
    读者写者读写限制(包括读者优先写者优先)
    1)写写互斥两写者时进行写操作
    2)读写互斥时读者读时写者写
    3)读读允许2读者时读
    读者写者分放进两等队列中读允许时读者队列释放读者写允许时释放第写者操作读者写者问题定义:许进程享数区数区文件者存块空间读取数区进程(Reader)数区写数进程(Writer)外需满足条件:
    1)意读进程时读文件
    2) 次写进程文件中写
    3)果写进程正进行操作禁止读进程度文件
    需分两种情况实现该问题:
    读优先:求指读者试图进行读操作时果时正读者进行操作直接开始读操作需等
    写优先:读者试图进行读操作时果写者等进行写操作正进行写操作等该写者完成写操作开始读操作
    程序三部分组成:
    1. 读者模块:包括系统调接口读者活动描述程序系统接口功通道父进程发送系统调命令读取父进程送返回值
    2. 写者模块:包括系统调接口写者活动描述程序
    读者写者活动程序根界资源享互斥原编制
    3 控模块:控模块实现系统初始化系统调命令接收解释执行系统调功实现(包括信号量机制)读者写者活动程记录显示



    4运行结果测试
    测试数文件包括n 行测试数分描述创建n 线程读者写者读写操作开始时间持续时间行测试数包括四字段字段间空格分隔第字段正整数表示线程序号第二字段表示相应线程角色R 表示读者W 表示写者第三字段正数表示读写操作开始时间线程创建延时相应时间(单位秒)发出享资源读写申请第四字段正数表示读写操作持续时间线程读写申请成功开始享资源读写操作该操作持续相应时间结束释放享资源面测试数文件例子:
     1 W4 5
    2 W 16 4
    3 R 5 2
    4 W 6 5
    5 R 4 3









    读者写者时队列中等申请资时读者优先调资源果读者申请进行读操作时已读者正进行读操作该读者直接开始读操作读读允许
    进程1W操作时间4时进入队列运行时间5进入时没进程占资源占资源直释放资源等候进程345
    进程截图示










    5课程设计总结心体会
    次课程设计完成题目读者写者问题实现更加系统理解掌握C语言基概念语言特点编程技巧应C语言程序设计方面系统锻炼C进行软件开发良基础程序设计思想较清晰印象程序设计奠定定心理技术准备总感觉学知识特linux全面接触解开始linux产生兴趣开放源码确学计算机志提供台读者写者问题典线程步问题模型读者写者问题编写步机构应深入解懂运信号量实现进程间互斥实现享资源时修改信号量原语操作界段问题解决较简单明读者写者问题编写花时间学东西解支持道程序发操作系统设计中解决资源享时进程间步互斥信号量机制天试验然难度点花时间学会攻克困难
    课程设计提高学知识综合应力全面检查掌握学容培养独立思考刻苦钻研精神分析问题解决问题程中更获种成功喜悦进增加学应兴趣时督促学程中断完善加强动手操作力培养独立思考种思维方式
    总次课程设计仅学机会锻炼实际动手力台然难度东西总会抵触课设程中郁闷时候错误心花午时间程中够磨练意志耐心感谢老师指导监督


    6参考文

    [1] Operating System Concepts(Sixth Edition)(操作系统概念)影印版 编:Abraham Silberschatz
    出版社:高等教育出版社
    [2] 操作系统原理(第三版) 编: 张尧学
    出版社:清华学出版社
    [3]操作系统实验教程 编:张丽芬刘利雄
    出版社:清华学出版社


    科生课程设计成绩评定表
    班级:软件工程   姓名:  学号:
    序号
    评分项目
    满分
    实分
    1
    学态度认真遵守纪律
    10

    2
    设计分析合理性
    10

    3
    设计方案正确性行性创造性
    20

    4
    设计结果正确性
    40

    5
    设计报告规范性
    10

    6
    设计验收
    10



    总分等级

    评语:












    注:终成绩五级分制记优(90100分)良(8089分)中(7079分)
    格(6069分)60分格



                          指导教师签名:
                      2010 年  月 日


    源代码
    #include

    #include

    #include

    #include

    #include

    #include

    #define MAX_PERSON 100

    #define READER 0 读者

    #define WRITER 1 写者

    #define END 1

    #define R READER

    #define W WRITER

    typedef struct _Person

    {

    HANDLE m_hThread定义处理线程句柄

    int m_nType进程类型(读写)

    int m_nStartTime开始时间

    int m_nWorkTime运行时间

    int m_nID进程号

    }Person

    Person g_Persons[MAX_PERSON]

    int g_NumPerson 0

    long g_CurrentTime 0基时间片数

    int g_PersonLists[] {进程队列

    1 W 4 5 2 W 16 4 3 R 5 2

    4 W 6 5 5 R 4 3

    END

    }

    int g_NumOfReading 0

    int g_NumOfWriteRequest 0申请写进程数

    HANDLE g_hReadSemaphore读者信号

    HANDLE g_hWriteSemaphore写者信号

    bool finished false 读完成

    bool wfinished false 写完成

    void CreatePersonList(int *pPersonList)

    bool CreateReader(int StartTimeint WorkTimeint ID)

    bool CreateWriter(int StartTimeint WorkTimeint ID)

    DWORD WINAPI ReaderProc(LPVOID lpParam)

    DWORD WINAPI WriterProc(LPVOID lpParam)

    int main()

    {

    g_hReadSemaphore CreateSemaphore(NULL1100NULL) 创建信号灯前资源数

    g_hWriteSemaphore CreateSemaphore(NULL1100NULL) 创建信号灯前资源数

    CreatePersonList(g_PersonLists) Create All the reader and writers

    printf(Created all the reader and writer\n\n)

    g_CurrentTime 0

    while(true)

    {

    g_CurrentTime++

    Sleep(300) 300 ms

    printf(CurrentTime d\ng_CurrentTime)

    if(finished) return 0
    system (pause)

    } return 0

    }

    void CreatePersonList(int *pPersonLists)

    {

    int i0

    int *pList pPersonLists

    bool Ret

    while(pList[0] END)

    {

    switch(pList[1])

    {

    case R

    Ret CreateReader(pList[2]pList[3]pList[0])351w452523654

    break case W

    Ret CreateWriter(pList[2]pList[3]pList[0])

    break

    }

    if(Ret)

    printf(Create Person d is wrong\npList[0])

    pList + 4 move to next person list

    }

    }

    DWORD WINAPI ReaderProc(LPVOID lpParam)读程

    {

    Person *pPerson (Person*)lpParam

    wait for the start time

    while(g_CurrentTime pPerson>m_nStartTime)

    { }

    printf(Reader d is Requesting \npPerson>m_nID)

    printf(\n\n************************************************\n)

    wait for the write request

    WaitForSingleObject(g_hReadSemaphoreINFINITE) if(g_NumOfReading 0)

    {

    WaitForSingleObject(g_hWriteSemaphoreINFINITE) }

    g_NumOfReading++

    ReleaseSemaphore(g_hReadSemaphore1NULL)

    pPerson>m_nStartTime g_CurrentTime

    printf(Reader d is Reading the Shared Buffer\npPerson>m_nID)

    printf(\n\n************************************************\n)

    while(g_CurrentTime < pPerson>m_nStartTime + pPerson>m_nWorkTime)

    {}

    printf(Reader d is Exit\npPerson>m_nID)

    printf(\n\n************************************************\n)

    WaitForSingleObject(g_hReadSemaphoreINFINITE)

    g_NumOfReading

    if(g_NumOfReading 0)

    {ReleaseSemaphore(g_hWriteSemaphore1NULL)时没读者写

    }

    ReleaseSemaphore(g_hReadSemaphore1NULL)

    if(pPerson>m_nID 4) finished true 读写完成

    ExitThread(0)

    return 0

    }

    DWORD WINAPI WriterProc(LPVOID lpParam)

    {

    Person *pPerson (Person*)lpParam

    wait for the start time

    while(g_CurrentTime pPerson>m_nStartTime)

    {}

    printf(Writer d is Requesting \npPerson>m_nID)

    printf(\n\n************************************************\n)

    WaitForSingleObject(g_hWriteSemaphoreINFINITE)

    modify the writer's real start time

    pPerson>m_nStartTime g_CurrentTime

    printf(Writer d is Writting the Shared Buffer\npPerson>m_nID)

    while(g_CurrentTime < pPerson>m_nStartTime + pPerson>m_nWorkTime)

    {}

    printf(Writer d is Exit\npPerson>m_nID)

    printf(\n\n************************************************\n)

    g_NumOfWriteRequest

    ReleaseSemaphore(g_hWriteSemaphore1NULL)

    if(pPerson>m_nID 4) finished true读写完成

    ExitThread(0)

    return 0

    }

    bool CreateReader(int StartTimeint WorkTimeint ID)

    {

    DWORD dwThreadID

    if(g_NumPerson > MAX_PERSON)

    return false

    Person *pPerson &g_Persons[g_NumPerson]

    pPerson>m_nID ID

    pPerson>m_nStartTime StartTime

    pPerson>m_nWorkTime WorkTime

    pPerson>m_nType READER

    g_NumPerson++

    Create an New Thread

    pPerson>m_hThread CreateThread(NULL0ReaderProc(LPVOID)pPerson0&dwThreadID)

    if(pPerson>m_hThread NULL)

    return false

    return true

    }

    bool CreateWriter(int StartTimeint WorkTimeint ID)

    {

    DWORD dwThreadID

    if(g_NumPerson > MAX_PERSON)

    return false

    Person *pPerson &g_Persons[g_NumPerson]

    pPerson>m_nID ID

    pPerson>m_nStartTime StartTime

    pPerson>m_nWorkTime WorkTime

    pPerson>m_nType WRITER

    g_NumPerson++

    Create an New Thread

    pPerson>m_hThread CreateThread(NULL0WriterProc(LPVOID)pPerson0&dwThreadID)

    if(pPerson>m_hThread NULL)

    return false

    return true

    }



    文档香网(httpswwwxiangdangnet)户传

    《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
    该内容是文档的文本内容,更好的格式请下载文档

    下载文档到电脑,查找使用更方便

    文档的实际排版效果,会与网站的显示效果略有不同!!

    需要 2 香币 [ 分享文档获得香币 ]

    下载文档

    相关文档

    实验报告撰写要求

    实验报告撰写要求  实验报告撰写要求   1.    实验报告和实验预习报告使用同一份实验报告纸,是在预习报告的基础上继续补充相关内容就可以完成的,不作重复劳动,因此需要首先把预习报告做的规范...

    12年前   
    621    0

    怎么写化学实验报告

    怎么写化学实验报告  1.实验目的   2.实验原理   3.产物(原料)的物理常数   4.试剂浓度   /  5.实验装置图   6.实验步骤   7.数据记录与处理   8.实验讨论与回...

    8年前   
    659    0

    什么是实验报告及实验报告怎么写

    什么是实验报告及实验报告怎么写  把实验的目的、方法、过程、结果等记录下来,经过整理,写成的书面汇报,就叫实验报告。   实验报告的种类因科学实验的对象而异。如化学实验的报告叫化学实验报告,物...

    11年前   
    522    0

    读者文摘

    读者文摘     Reader's Digest    我们公司的使命    读者文摘公司以服务为优良传统,我们不仅是一家全球性出版商,更是世界直效行销的领导者。我们...

    9年前   
    26454    0

    公文拟写者的修养

    公文拟写者的修养  公文是一种应用文件,是国家管理政务,机关处理工作的一个重要工具,它的政策性、思想性和业务性都很强。拟写公文是一种综合能力的体现。一份好的公文,没有一定的政治理论水平、广博的...

    11年前   
    500    0

    研究者相关问题

    主要研究者(Principal Investigator, PI)是指全面负责一项临床试验的质量及受试者安全和权益的人。在多中心临床试验中,每个临床试验中心都有一位研究者负责该中心研究的执行,这...

    6年前   
    3209    0

    《读者》读后感

    《读者》读后感《读者》读后感1   花了一个小午时间,读了两本【读者】。算起来也有一两年时间没有去接触过【读者】了吧,这本来是自己非常喜欢的一本杂质,也是唯一向爸爸推荐过的一本杂质。 ...

    2年前   
    457    0

    读者活动策划

    读者活动策划 活动主题: 读者大联谊   活动目的: 增进读者与电杂的关系,让大家更加的和谐相处,接受来自四面八方(。。。)的建议。也让各个文学群的群员们互相的融洽的一起玩耍。  ...

    9年前   
    6506    0

    2014读者杯征文大赛(征文,读者,大赛)

    2014读者杯征文大赛(征文,读者,大赛)第一篇:“课标杯”“创新杯”征文大赛关于举办2014年“课标杯”全国中小学教育教学论文大赛征稿通知随着东盟经济合作的不断深化,中国—东盟的文化教育交流...

    10年前   
    610    0

    《读者》读书笔记

    《读者》读书笔记  近几天,我无意中在《读者》这本书上发现一篇令我感兴趣的文章,而我越读越有劲,深深地被吸引住,才发现这篇文章的魅力如此大,使拿起放不下,放下又拿起,十分喜欢读。  这篇文章主...

    10年前   
    536    0

    读者入馆须知

    读者入馆须知  1.使用图书馆按照公示的开馆时间作息。馆内如遇节假日或因内部整理及其他原因不能开放将另行通告  2.馆内借书一律凭有效证件。借书凭借书证,阅览凭借书证或学生证。   3.尊重工...

    10年前   
    493    0

    党员朗读者制度

    为切实增强党员朗读、学习能力,不断提高党员的综合素质,通过多方面、多专业的朗读原文、原著知识,让新知识为党员赋能,特制定党员“朗读者”活动制度。

    2年前   
    484    0

    电教研究报告与实验报告的撰写

    电教研究报告与实验报告的撰写  电教研究报告与实验报告的撰写  一、电教研究报告  (一)写法(格式)  1、题目。必须反映报告的主要内容或观点,要用最恰当、简明的词语概括,做到准确、鲜明、生...

    12年前   
    468    0

    遗传算法求解TSP问题实验报告

    人工智能实验报告实验六 遗传算法实验II一、实验目的:熟悉和掌握遗传算法的原理、流程和编码策略,并利用遗传求解函数优化问题,理解求解TSP问题的流程并测试主要参数对结果的影响。二、实验原理:旅...

    3年前   
    773    0

    管理者必须面对的问题

    管理者必须面对的问题01工厂利益与员工利益紧密捆绑有些工厂为了节省成本,一切均以工厂利益至上。对待员工利益是能抠就抠,工作环境不好,吃的不好,住的不好。如果是这样的工厂,员工一定是处于应付式的...

    1年前   
    273    0

    大数的认识(3)——写数 教学设计

     大数的认识(3)——写数 教学设计 教学目标 1. 掌握根据数级写多位数。(以万级为主) 2. 培养学生类推概括的能力。 教...

    2年前   
    446    0

    《大地的话》仿写(多篇)3

    《大地的话》仿写(多篇)3   《大地的话》是一首现代诗,诗人运用拟人化的手法,把大地拟人化为母亲,抒写着大地母亲宽容、慈爱,以及无私奉献的情怀。全诗韵味十足,朗朗上口,有一种清新明快的节...

    8个月前   
    191    0

    读书馆读者反馈座谈会工作汇报

    读书馆读者反馈座谈会工作汇报  今天我院学习部部长吕xx与委员商xx共同参加了图书馆读者反馈座谈会,并将同学意见整理汇总后如实反馈给了图书馆的领导老师们,现将图书馆领导针对我们的意见所给的反馈...

    11年前   
    396    0

    读者服务部主任岗位职责

    读者服务部主任岗位职责  1. 负责总书库文献流通及各项管理工作。  2. 负责读者借阅证的发放、补办和回收。  3. 做好藏书保管及书库的防火、防盗、防尘、防虫工作,及时组织图书清理、剔除旧...

    12年前   
    645    0

    《寄小读者》读后感(精选多篇)

    《寄小读者》读后感(精选多篇)第一篇:《寄小读者》读后感在寒假里,我读了一本叫《寄小读者》的书。相信大家对这本书应该不陌生,对了!其实这就是冰心写的一篇十分有名的书。书中的内容只要看一下书名就...

    10年前   
    644    0

    文档贡献者

    文***品

    贡献于2020-10-08

    下载需要 2 香币 [香币充值 ]
    亲,您也可以通过 分享原创文档 来获得香币奖励!
    下载文档

    该用户的其他文档