欢迎来到天天文库
浏览记录
ID:40216366
大小:239.50 KB
页数:30页
时间:2019-07-26
《操作系统实验读者写者》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、计算机操作系统原理实验实验二:读者写者问题指导:蒋良宵邮箱:operating_system12@163.com1概述实验目的实验内容实验要求实验环境实验分析与设计相关API函数输入数据与运行结果说明2对读者写者问题的实现进行分析,并进一步分别对读者优先和写者优先两种算法的核心思想作了探讨和程序设计的提示。对程序设计中将会用到的API函数的功能及参数进行说明,并对其中重要的几个函数作讲解。实验目的1、熟悉多线程编程2、熟悉使用信号量机制解决同步问题3实验内容创建一个控制台进程。此进程包含n个线程。用这n个线程来表示n个读者或写者。每个线程按相应测
2、试数据文件(后面有介绍)的要求进行读写操作。用信号量机制分别实现读者优先和写者优先的读者-写者问题。4实验要求读者-写者问题的读写操作限制(包括读者优先和写者优先):1)写-写互斥,即不能有两个写者同时进行写操作。2)读-写互斥,即不能同时有一个线程在读,而另一个线程在写。3)读-读允许,即可以有一个或多个读者在读。比喻:把摘花比作写,赏花比作读,那么写-写互斥就像两个或多个人不能同时摘同一朵花,否则就出现争抢场面。类似的,那么读-写互斥就像一个人正在赏花时,另一个人却在摘这朵花,导致矛盾的产生。不同的是,对于一朵花而言,多个人可以同时观赏,并不
3、会产生矛盾。5实验要求(续)读者优先的附加限制:如果一个读者申请进行读操作时已有另一个读者正在进行读操作,则该读者可直接开始读操作。写者优先的附加限制:如果一个读者申请进行读操作时已有另一写者在等待访问共享资源,则该读者必须等到没有写者处于等待状态后才能开始读操作。运行结果显示要求:要求在每个线程创建、发出读写操作申请、开始读写操作和结束读写操作时分别显示一行提示信息,以确定所有处理都遵守相应的读写操作限制。6实验环境1、一台WINDOWS2000/NT/XP操作系统的计算机2、VisualC++编程平台7实验分析与设计——进程和线程(1/2)在
4、Windows32位操作系统中,所谓多任务是指系统可以同时运行多个进程,而每个进程也可以同时执行多个线程。所谓进程就是应用程序的运行实例。每个进程都有自己私有的虚拟地址空间。每个进程都有一个主线程,但可以建立另外的线程。进程中的线程是并发执行的,每个线程占用CPU的时间由系统来划分。我们可以把线程看成是操作系统分配CPU时间的基本实体。8实验分析与设计——进程和线程(2/2)进程中的所有线程共享进程的虚拟地址空间,这意味着所有线程都可以访问进程的全局变量和资源。这一方面为编程带来了方便,但另一方面也容易造成冲突。虽然在进程中进行费时的工作不会导致
5、系统的挂起,但这会导致进程本身的挂起。所以,如果进程既要进行长期的工作,又要响应用户的输入,那么它可以启动一个线程来专门负责费时的工作,而主线程仍然可以与用户进行交互。9实验分析与设计——线程同步(1/3)1、线程的同步多线程的使用会产生一些新的问题,主要是如何保证线程的同步执行。多线程应用程序需要使用同步对象和等待函数来实现同步。同步问题是实现远程数据采集或远程自动控制编程中的关键技术问题。10实验分析与设计——线程同步(2/3)2、同步的原因由于同一进程的所有线程共享进程的虚拟地址空间,并且线程的中断是汇编语言级的,所以可能会发生两个线程同时
6、访问同一个对象(包括全局变量、共享资源、API函数和MFC对象等)的情况,这有可能导致程序错误。例如,如果一个线程在未完成对某一大尺寸全局变量的读操作时,另一个线程又对该变量进行了写操作,那么第一个线程读入的变量值可能是一种修改过程中的不稳定值。属于不同进程的线程在同时访问同一内存区域或共享资源时,也会存在同样的问题。因此,在多线程应用程序中,常常需要采取一些措施来同步线程的执行。11实验分析与设计——线程同步(3/3)3、同步的方法由于线程间需要同步机制,才能协调运行。在Win32编程中,主要由WINDOWSAPI函数来实现,这部分知识将会在后
7、面讨论。12实验分析与设计——同步对象(1/4)同步对象用来协调多线程的执行,它可以被多个线程共享。线程的等待函数用同步对象的句柄作为参数,同步对象应该是所有要使用的线程都能访问到的。同步对象的状态要么是有信号的,要么是无信号的。同步对象主要有三种:事件、mutex和信号灯。13实验分析与设计——同步对象(2/4)事件对象(Event)是最简单的同步对象,它包括有信号和无信号两种状态。在线程访问某一资源之前,也许需要等待某一事件的发生,这时用事件对象最合适。例如,只有在通信端口缓冲区收到数据后,监视线程才被激活。14实验分析与设计——同步对象(3
8、/4)Mutex对象的状态在它不被任何线程拥有时是有信号的,而当它被拥有时则是无信号的。mutex对象很适合用来协调多个线程对共享资源的
此文档下载收益归作者所有