操作系统-创建线程,利用互斥实现线程共享变量通信

操作系统-创建线程,利用互斥实现线程共享变量通信

ID:47457219

大小:238.50 KB

页数:24页

时间:2020-01-11

操作系统-创建线程,利用互斥实现线程共享变量通信_第1页
操作系统-创建线程,利用互斥实现线程共享变量通信_第2页
操作系统-创建线程,利用互斥实现线程共享变量通信_第3页
操作系统-创建线程,利用互斥实现线程共享变量通信_第4页
操作系统-创建线程,利用互斥实现线程共享变量通信_第5页
资源描述:

《操作系统-创建线程,利用互斥实现线程共享变量通信》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、创建线程,利用互斥实现线程共享变量通信一.概述1.1课题目的和意义掌握线程创建和终止,加深对线程和进程概念的理解,会用同步与互斥方法实现线程之间的通信。1.2内容和要求软件界面上点“创建线程”按钮,创建三个生产者线程(P1,P2,P3)和两个消费者线程(C1,C2),生产者和消费者线程共享一个长度为2KB的环型公共缓冲区,生产者向其中投放消息,消费者从中取走消息。只要缓冲区未满,生产者可将消息送入缓冲区;只要缓冲区未空,消费者可从缓冲区取走一个消息。每个消息具下列结构格式:消息头(1B,固定为0xaa),消息长度(1B),消息内容(nB),校验和(1B),检验和计算方式

2、为消息长度和消息内容所有字节异或结果。每个生产者每隔n毫秒(n用随机数产生,1到100毫秒之间,间隔不固定)生产一个消息加入缓冲区,并把消息产生时间和内容记录在一个文本文件中(或显示在列表框中)。P1每次生产的数据为26个大写字母,P2每次生产的数据为26个小写字母,P3每次生产的数据为10个数字。每个消费者每隔n秒(n用随机数产生,1到5秒之间,间隔不固定)从缓冲区取走一个消息。每消费一个消息需要将消费时间和消息内容记录在一个文本文件中(或显示在列表框中)。当用户按结束按钮时结束5个线程,并将5个文件内容显示出来进行对照。这期实是一个经典的生产者—消费者(Produc

3、er_consumer)进程(线程)同步的问题。它描述的是:有一群生产者进程在生产产品,并将此产品提供给消费者进程(线程)去消费。为使生产者进程和消费者进程(线程)能并发执行,在它们之间设置有个缓冲区的缓冲池,生产者进程(线程)可将它所生产的产品放入一个缓冲区中,消费者进程(线程)可从一个缓冲区取得一个产品消费。尽管所有的生产者进程和消费者进程(线程)都是以异步的方式运行的,但它们之间必须保持同步,即不允许消费者进程(线程)到一个空缓冲区去取产品,也不允许生产者进程(线程)向一个已装有消息尚未被取走产品的缓冲区投放产品。如下图所示:1.3线程所采用的同步方法同步是多线程

4、中的重要概念.同步的使用可以保证在多线程运行的环境中,程充不会产生设计之外的结果.同步的实现方式有两种,同步方法和同步块.线程在执行同步方法是具有排它性的.当任意一个线和进入到一个对象的任意一个同步方法时,这个对象所有同步方法都被锁定,在些期间,期他任何线程都不能访问这个对象的任意一个同步方法,直到这个线程执行完它所调用的同步方法并从中退出,从而导至它释放了该对象的同步锁这后.在一个对象被某个线程锁定之后,其他线程是可以访问.同步的有几种实现方法,分别是:wait():使一个线程处于等待状态,并且释放所有持有的对象lock.sleep():使一个正在运行的线程处于睡眠状

5、态,是一个静态方法,调用此方法要捕捉InterruptedException异常。notify():唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不能确切的唤醒某一个等待状态的线程,而是由JVM确定唤醒哪个线程,而且不是按优先级。Allnotity():唤醒所有处入等待状态的线程,注意并不是给所有唤醒线程一个对象的锁,而是让它们竞争。1.4开发工具平台开发平台:windowXP开发工具:VC++一.数据定义和详细说明1数据定义设计PV操作算法,用信号量机制实现生产者与消费者同步与互斥问题,并与无PV情况下进行对比。定义20个缓冲区,将其初始化为0。调用随机函

6、数rand()生成随机数,把随机数通过生产者放入缓冲区。若缓冲区满则其值非0。当消费者从缓冲区中去数后缓冲区值变为0。程序可显示缓冲区中的全部内容,方便观察生产者与消费者的行为。程序可通过设置sleep(time)中time的值来控制生产者与消费者的执行顺序。2详细说明为了实现生产者与消费者同步与互斥的问题,该程序用记录型信号量机制来实现。假定在生产者与消费者之间,利用一个公共的缓冲池来进行通信,生产者将所生产的信息放入其中,消费者cognitive缓冲池中取得消息来消费,该缓冲池具有n个缓冲区,其编号为0,1,2,3···,n-1;设置一个互斥信号量mutex,用于实

7、现诸进程对缓冲池的互斥使用,其初值为1,利用资源信号量empty,表示缓冲池中空缓冲区的数目,其初值为n;full分别表示缓冲池中满缓冲区的数目,其初值为0.又假定这些生产者和消费者相互等效,只要缓冲池未满,生产者便可将消息送入由指针in所指的缓冲区;只要缓冲池未空,消费者变可以从由指针out所指示的缓冲区中,取走一个消息。对生产者消费者的问题可以描述如下:Varmetux,empty,full:semaphore=1,n,0;Buffer:array[0,···n-1]ofitem;In,out:integer:=0;Begin:Pab

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。