基于VC多线程演示程序.ppt

  1. 1、本文档共26页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
基于VC多线程演示程序

基于VC多线程演示程序 ----王红 引入 主要任务 基本函数的介绍及应用 功能模块设计 总结 * * 程序(Program)是一组指令的有序集合,它本身没有任何运行的含义,它只是一个静态的实体。 也就是说,用程序这个静态的实体不能反映程序在并发执行过程的这些动态特征。于是,人们引入“进程(Process)“这一概念来描述程序动态执行过程的性质。 进程是应用程序的执行实例,是操作系统分配资源单位。进程最根本的属性是动态性和并发性。 每个进程是由私有的虚拟地址空间、代码、数据和其它各种系统资源组成,进程在运行过程中创建的资源随着进程的终止而被销毁,所使用的系统资源在进程终止时被释放。 进程的引入 由于每创建一个进程需要申请许多的系统资源,比如内存空间分配,PCB的分配等,这样就会造成一些不必要的浪费,而线程不需要任何系统资源,它与所属的进程共享系统资源,并且线程之间的切换速度快,提高了程序运行的效率,所以引入了线程的概念。 线程是操作系统分配处理器的最基本单元,它是操作系统用来调度执行的最小单位。 一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发执行。 线程的引入 线程的状态及其转化 运行 就绪 阻塞 事件发生 分配到 CPU 等待 事件 时间片 用完 线程之间的通信 在多线程的环境里,需要对线程之间的通信进行同步。常用的同步对象: 1、临界区 通过提供所有线程必须共享的对象来控制线程,只有拥有临界区的线程才可以访问受保护资源。 2、互斥量 互斥量和临界区的工作方式相似,区别在于互斥量不仅保护一个进程内的资源共享,而且还保护系统中线程之间的共享资源。 3、信号量 信号量与互斥量相似,但是互斥只允许在同一时刻一个线程访问它的数据,而信号量允许多个线程在同一时刻访问它的数据。 4、事件 事件对象用于给线程传递信号,指示线程中特定的操作可以开始或结束。 BUFFER2 BUFFER1 本演示程序主要是对下面的模型实例化,利用图形界面直观易懂的特点,把完全抽象的线程的就绪、阻塞(等待)、执行的状态以及同步互斥的过程用图形动态的显示出来。 本演示程序使用的开发工具是VC++6.0,基于MFC类库的。用信号量和事件作为线程之间的同步互斥工具,通过对设置BUFFER1、BUFFER2的容量,来协调PUT、GET、MOVE这三个线程,使其同步来实现P、V操作。本程序并非真正的传输数据,只是对一个数据计数器加减来模拟数据的增加减少,然后通过定时刷新,将线程的状态、数据显示到界面上。 主要完成的任务 PUT MOVE GET 主要用到的函数 本演示程序用到的P/V操作函数是: #define p(s) ::WaitForSingleObject(s,INFINITE) #define v(s) ::ReleaseSemaphore(s,1,NULL) 1、 P/V操作函数 P/V操作就是用一个信号量S来实现线程之间的通信。信号量S是一个由P操作和V操作改变其值的整型变量。 P操作一次,S值减1,即S=S-1(请求分配一资源),如果S≥0,则该线程继续执行;如果S0表示无资源,则该线程的状态置为等待状态,并把该线程加入到信号量等待队列。 V操作一次,S值加1,即S=S+1(释放一资源)如果S0,表示有资源,则该线程继续执行;如果S≤0,则释放信号量队列上的第一个线程(等待状态改为就绪状态),执行V操作的线程继续运行。 2、等待函数 DWORD WaitForSingleObjec( HANDLE hHandle,//对象句柄 DWORD dwMilliseconds//等待的时间,单位为毫秒) 第一个参数是等待的同步对象的句柄,第二个参数为等待时间。 等待函数返回:同步对象获得信号时返回;等待时间达到了返回。如果等待时间不限制(Infinite),则只有同步对象获得信号才返回,在等待期间会将线程挂起,直到等待的信号量有信号进入就绪状态。 3、 MFC中的CSemaphore类(信号量) 当需要一个计数器来限制可以使用某个资源的线程数目时,可以使用信号量对象,即CSemaphore类的对象。 CSemaphore的一个对象保存了对当前访问某一指定资源的线程的计数值,该计数值是当前还可以使用该资源的线程的数目。 1)信号量创建函数: HANDLE CreateSem

文档评论(0)

beoes + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档