多线程处理教学

多线程处理教学

ID:27102736

大小:326.01 KB

页数:69页

时间:2018-12-01

多线程处理教学_第1页
多线程处理教学_第2页
多线程处理教学_第3页
多线程处理教学_第4页
多线程处理教学_第5页
资源描述:

《多线程处理教学》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第十六章多线程处理本章的学习内容包括六个方面:1理解多线程处理概念。2理解多线程处理怎样提高程序性能。3理解如何创建、管理和销毁线程。4理解线程生命期。5理解线程同步。6理解线程优先级和调度。多线程处理具有广泛的应用。例如,当进程从网上下载音频或视频大文件时,不希望等整个文件下载完毕后才开始播放。为了解决这个问题,可以设计两个线程。一个线程下载文件,另一个线程负责播放。使得两种操作能同时进行。为避免播放操作的时断时续,还应对两个线程进行“同步”,在下载了足够的数据后才开始播放。与此同时,下载数据仍在继续。C++/CLI的自动化“垃圾回收”也是通

2、过多线程实现的。即程序运行的同时,自动化“垃圾回收”线程始终跟踪着指针所引用的托管类对象的活动,并在其不再使用时,回收该对象所占用的内存资源。.NETFramework类库允许开发者轻松地使用并发性指令,即可以指定一个程序包含多个执行线程,每个线程都代表程序的一个独立运行的流程,程序的各个流程都可以并发执行。16.1线程状态:线程生命期对于托管类多线程应用程序,Thread和Monitor类型是尤为重要的。这两个类均在System::Threading命名空间中,Thread用于线程的创建、运行和辅助功能,Monitor用于创建线程间的同步机制

3、。线程一旦成功创建,在任何时刻都处于某种“线程状态”。线程的状态包括:unSatarted:“未启动”状态Running:“运行”状态Stopped:“停止”状态Blocked:“阻塞”状态WaitSleepJoin:“等待-休眠-联接”状态Suspended:“挂起”状态或“延迟执行”状态线程的生命期(各种线程状态之间的转换)如下图所示:UnstartedRunningWaitSleepJoinSuspendedStoppedBlockedResumeWait,Sleep,JoinPulse,PulseAll,Interrupt,被依赖线程终

4、止SuspendAbort,线程完成同步锁禁用,发出I/O请求同步锁可用,I/O操作完成Start1Unstarted->Running:程序创建一个线程对象,并向构造函数传递一个ThreadStart委托时,线程将从Unstarted开始其生命期。ThreadStart委托指定了线程在生命期内要进行的操作。该委托必须是一个不接收任何参数的void类型方法。在没有调用Thread对象的Start方法之前,线程始终处于Unstarted状态。一旦方法Start方法被调用,线程便进入Running状态。2Running->Stopped:发生这种状

5、态转换的情况有两种:⑴线程在其委托ThreadStart终止后,便进入Stopped状态。⑵Thread对象的Abort方法被调用,线程抛出一个线程异常ThreadAbortException,导致线程终止。如果线程已经处于Stopped状态,并且程序中不再存在指向该线程的指针,则垃圾回收器就能从内存中撤消该线程对象。注意,从内部来说,调用线程的Abort方法时,线程实际上先进入并保持“AbortRequested”状态,直至接收到线程异常ThreadAbortException,线程才进入Stopped状态。因此,调用Abort方法时,如果线

6、程处于WaitSleepJoin、Suspended或者Blocked状态,线程就会暂时保持当前状态以及“AbortRequested”状态,直到线程离开了当前状态,才能接收到ThreadAbortException。3Running<->Blocked:发生这种状态转换的情况有两种:⑴线程请求I/O等操作,使得该线程无法使用处理器(即使处理器可用),便进入Blocked状态,即操作系统会一直阻塞线程的执行,直到线程请求的I/O等操作完成后,线程将恢复Running状态。⑵线程同步时,必须调用Monitor的Enter方法,以便获得一个对象的同

7、步锁,如果该锁暂时被禁用(其他同步线程占用),则该线程就会进入Blocked状态;直到同步锁可用后,该线程才恢复Running状态。4Running<->WaitSleepJoin:发生这种状态转换的情况有三种:⑴线程遇到了暂时不能执行的代码(通常是因为不满足某个执行条件),线程就可能调用Monitor的Wait方法,从而进入WaitSleepJoin状态。之后,只有另一个线程调用了Monitor的Pulse或PulseAll方法,线程恢复Running状态。⑵一个Running状态线程的Sleep方法可被调用,使线程进入WaitSleepJo

8、in状态。休眠时间由传给Sleep方法的参数指定。一旦休眠时间到期,该线程便恢复Running状态。对于调用Monitor类型的Wait方法或Thre

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

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

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