版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 国家信息化计算机教育认证国家信息化计算机教育认证高等职业教育电子信息类专业高等职业教育电子信息类专业“双证课程双证课程”培养方案配套演示文稿培养方案配套演示文稿中国高等职业技术教育研究会中国高等职业技术教育研究会 & CEAC& CEAC信息化培训认证管理办公室信息化培训认证管理办公室 工程化程序设计工程化程序设计Visual C+.NET)第第11章章 多线程处理多线程处理 中国高等职业技术教育研究会中国高等职业技术教育研究会 & CEAC信息化培训认证管理办公室信息化培训认证管理办公室 课程描述:课程描述: 程序员经常碰到这样的需求,比如用户想从程序员经常碰到这样
2、的需求,比如用户想从因特网上浏览页面、下载文件、听音乐、打印文因特网上浏览页面、下载文件、听音乐、打印文档等,而且要同时进行。为此,通常需要一种叫档等,而且要同时进行。为此,通常需要一种叫做做“多线程处理的技术,它允许应用程序同时多线程处理的技术,它允许应用程序同时采取多项行动。采取多项行动。Visual C+.NETVisual C+.NET允许程序员直允许程序员直接使用接使用.NET.NET语言的语言的FrameworkFramework类库类库(FCL)(FCL)所提供所提供的多线程处理类,以避免涉及过于复杂的细节。的多线程处理类,以避免涉及过于复杂的细节。 本章将学习本章将学习FCLF
3、CL所提供的线程处理类,线程、所提供的线程处理类,线程、线程生命期、时间分片、线程优先级等概念,以线程生命期、时间分片、线程优先级等概念,以创建客户所需要的多线程程序。创建客户所需要的多线程程序。 第第11章章 多线程处理多线程处理 中国高等职业技术教育研究会中国高等职业技术教育研究会 & CEAC信息化培训认证管理办公室信息化培训认证管理办公室 了解多线程处理的基本概念。了解多线程处理的基本概念。 了解线程的优先级与调度。了解线程的优先级与调度。 理解线程的各种状态以及各状态之间的转换。理解线程的各种状态以及各状态之间的转换。 理解线程状态与线程生命期。理解线程状态与线程生命期。 熟
4、练利用熟练利用ThreadThread类创建、执行和管理线程。类创建、执行和管理线程。 理解线程同步的概念。理解线程同步的概念。 利用利用 MonitorMonitor类实现线程同步。类实现线程同步。 知识点及技能点知识点及技能点 中国高等职业技术教育研究会中国高等职业技术教育研究会 & CEAC信息化培训认证管理办公室信息化培训认证管理办公室 11.1 11.1 概述概述11.2 11.2 线程生命期线程生命期11.3 11.3 线程优先级和线程调度线程优先级和线程调度11.4 11.4 多线程编程示例多线程编程示例11.5 11.5 线程同步线程同步 重点和难点重点和难点讨论讨论
5、本章小结本章小结作业及练习作业及练习主要内容主要内容 中国高等职业技术教育研究会中国高等职业技术教育研究会 & CEAC信息化培训认证管理办公室信息化培训认证管理办公室 1.1.进程与线程进程与线程 当前计算机操作系统能够同时执行很多任务。例如,一台当前计算机操作系统能够同时执行很多任务。例如,一台PCPC机可以机可以同时编译程序、向打印机发送文件以及通过网络收发电子邮件。这归功同时编译程序、向打印机发送文件以及通过网络收发电子邮件。这归功于于Win9x/Win2000/WinxpWin9x/Win2000/Winxp完全实现了多进程完全实现了多进程/ /多线程的支持。多线程的支持。
6、进程进程(Process)(Process)可以理解为程序的一次执行,是应用程序的执行实可以理解为程序的一次执行,是应用程序的执行实例。例如,双击例。例如,双击“画图图标时,将启动运行画图图标时,将启动运行“画图的进程。画图的进程。 线程线程(Thread)(Thread)可以理解为进程中的执行的一段程序片段。例如启动可以理解为进程中的执行的一段程序片段。例如启动“画图时,操作系统创建进程并开始执行该进程的主线程。此线程终画图时,操作系统创建进程并开始执行该进程的主线程。此线程终止时,进程也终止。如果愿意,可以在应用程序中创建其他线程。同一止时,进程也终止。如果愿意,可以在应用程序中创建其他线
7、程。同一进程的多个线程共享一块内存空间和一组系统资源。进程的多个线程共享一块内存空间和一组系统资源。11.1 概述概述 中国高等职业技术教育研究会中国高等职业技术教育研究会 & CEAC信息化培训认证管理办公室信息化培训认证管理办公室 进程进程Xint x=1;(对)(对)进程进程Yint y=2;取进程取进程X的变量的变量x,y=x+6;(错错)线程线程ax+=5; 存存线程线程bx=x*3;存存图图11-1 进程与线程的关系进程与线程的关系11.1 概述概述进程与线程的关系如图11-1所示。 中国高等职业技术教育研究会中国高等职业技术教育研究会 & CEAC信息化培训认证管
8、理办公室信息化培训认证管理办公室 2.2.多线程多线程 如今,一切如今,一切.NET.NET语言都支持多线程处理,允许普通的应用程序开发语言都支持多线程处理,允许普通的应用程序开发者轻松地使用并发性指令。程序员可以指定一个应用程序包含者轻松地使用并发性指令。程序员可以指定一个应用程序包含“执行线执行线程程”,每个线程都代表程序的一部分,而且这个部分能和其他线程并发,每个线程都代表程序的一部分,而且这个部分能和其他线程并发执行执行, ,这就是所谓的这就是所谓的“多线程处理多线程处理”。 多线程处理具有广泛的应用。例如,当程序从网上下载大文件时多线程处理具有广泛的应用。例如,当程序从网上下载大文件
9、时如声音或视频剪辑),用户不希望等整个剪辑下载完毕后才开始播放。如声音或视频剪辑),用户不希望等整个剪辑下载完毕后才开始播放。为了解决这个问题,可以设计多个线程。一个线程下载文件,另一个线为了解决这个问题,可以设计多个线程。一个线程下载文件,另一个线程则负责播放。程则负责播放。11.1 概述概述 中国高等职业技术教育研究会中国高等职业技术教育研究会 & CEAC信息化培训认证管理办公室信息化培训认证管理办公室 线程在任何时刻都处于某种线程在任何时刻都处于某种“线程状态线程状态”,参见线程生命周期图,参见线程生命周期图图图11-211-2)。对于多线程应用程序来说,尤其重要的类是)。对于
10、多线程应用程序来说,尤其重要的类是ThreadThread类和类和MonitorMonitor类。类。ThreadThread类的功能是创建并控制线程,设置线程优先级并获类的功能是创建并控制线程,设置线程优先级并获取线程状态。取线程状态。MonitorMonitor类主要提供同步对象的访问机制。可以通过类主要提供同步对象的访问机制。可以通过ThreadThread类和类和MonitorMonitor类的几个方法来进行状态转移。类的几个方法来进行状态转移。 ThreadState ThreadState 为线程定义了一组所有可能的执行状态。一旦线程为线程定义了一组所有可能的执行状态。一旦线程被创
11、建,它就至少处于其中一个状态中,直到终止。被创建,它就至少处于其中一个状态中,直到终止。 11.2 线程的生命期线程的生命期 中国高等职业技术教育研究会中国高等职业技术教育研究会 & CEAC信息化培训认证管理办公室信息化培训认证管理办公室 程序新建一个线程对象,在创建线程对象时会向对象的构造函数程序新建一个线程对象,在创建线程对象时会向对象的构造函数传递一个传递一个ThreadStartThreadStart委托,此时,线程将从委托,此时,线程将从 UnstartedUnstarted未启动状未启动状态开始它的生命期。态开始它的生命期。ThreadStartThreadStart委托
12、指定了线程在其生命期内所要采委托指定了线程在其生命期内所要采取的操作。这个操作必须是一个返回取的操作。这个操作必须是一个返回voidvoid的函数,而且函数应当不带的函数,而且函数应当不带参数。线程将保持参数。线程将保持UnstartedUnstarted状态直到程序调用线程对象的状态直到程序调用线程对象的StartStart方法,方法,这时线程将进入这时线程将进入RunningRunning运转形状。然后,该线程以及程序中的其运转形状。然后,该线程以及程序中的其他任何线程就能同时执行,它们要么由多处理器系统提供支持,要么他任何线程就能同时执行,它们要么由多处理器系统提供支持,要么共享系统中的
13、同一个处理器。共享系统中的同一个处理器。 在在RunningRunning状态中,线程实际可能并非总是在执行。只有在操作系状态中,线程实际可能并非总是在执行。只有在操作系统为线程分配了一个处理器之后,该线程才会执行。统为线程分配了一个处理器之后,该线程才会执行。线程生命期的开始与线程生命期的开始与Running状态状态 中国高等职业技术教育研究会中国高等职业技术教育研究会 & CEAC信息化培训认证管理办公室信息化培训认证管理办公室 当一个处于当一个处于RunningRunning状态的线程遇到下面状态的线程遇到下面3 3种情况时,该线程就会种情况时,该线程就会进入进入WaitSlee
14、pJoinWaitSleepJoin等待等待休眠休眠衔接形状。第一种情况是如果线衔接形状。第一种情况是如果线程遇到它暂时不能执行的代码通常是因为不满足某个条件),线程程遇到它暂时不能执行的代码通常是因为不满足某个条件),线程就可能调用就可能调用MonitorMonitor的的WaitWait的方法,从而进入的方法,从而进入WaitSleepJoinWaitSleepJoin状态。之状态。之后,只有当另一个线程调用后,只有当另一个线程调用MonitorMonitor的的PulsePulse或或PulseAllPulseAll的方法时,它的方法时,它才会恢复才会恢复RunningRunning状态
15、。状态。PulsePulse方法使下一个正在等待的线程恢复到方法使下一个正在等待的线程恢复到RunningRunning状态,状态,PulseAllPulseAll则使所有正在等待的线程恢复到则使所有正在等待的线程恢复到RunningRunning状态。状态。WaitSleepJoin状态状态 中国高等职业技术教育研究会中国高等职业技术教育研究会 & CEAC信息化培训认证管理办公室信息化培训认证管理办公室 一个处于一个处于RunningRunning状态的线程,它的状态的线程,它的SuspendSuspend方法被调用之后方法被调用之后由线程自己调用,或者程序中的另一个线程调用),该
16、线程就会由线程自己调用,或者程序中的另一个线程调用),该线程就会进入进入SuspendedSuspended挂起形状。只有当程序中的另一个线程调用挂挂起形状。只有当程序中的另一个线程调用挂起线程的起线程的ResumeResume方法后,挂起线程才会恢复成方法后,挂起线程才会恢复成RunningRunning状态。在内状态。在内部,部, 调用一个线程的调用一个线程的SuspendSuspend方法后,线程实际上会首先进入方法后,线程实际上会首先进入SuspendRequestedSuspendRequested状态,再进入状态,再进入 SuspendedSuspended状态。状态。Suspen
17、d状态状态 中国高等职业技术教育研究会中国高等职业技术教育研究会 & CEAC信息化培训认证管理办公室信息化培训认证管理办公室 线程执行结束后会进入线程执行结束后会进入StoppedStopped状态。处于状态。处于StoppedStopped状态的状态的线程,程序中不再有指向该线程对象的指针,垃圾回收器就能线程,程序中不再有指向该线程对象的指针,垃圾回收器就能从内存中移除该对象。程序如果要强迫一个线程进入从内存中移除该对象。程序如果要强迫一个线程进入StoppedStopped状状态,可以调用线程对象的态,可以调用线程对象的AbortAbort方法。方法。AbortAbort方法会在
18、线程中抛方法会在线程中抛出一个出一个ThreadAbortExceptionThreadAbortException异常,它通常会导致线程终止,异常,它通常会导致线程终止,线程的生命期如图线程的生命期如图11-211-2所示。所示。线程生命期的终止与线程生命期的终止与Stopped状态状态 中国高等职业技术教育研究会中国高等职业技术教育研究会 & CEAC信息化培训认证管理办公室信息化培训认证管理办公室 UnstartedRunningSuspendedWaitSleepJoinStoppedBlockedStartWait,Sleep,JoinPulse,PulseAll,Inter
19、rupt,休眠时休眠时间到期间到期ResumeSuspendAbort,完成完成发出发出I/O请求请求,锁不可用锁不可用I/O完成完成,锁可用锁可用图图11-2 11-2 线程生命期线程生命期线程生命期的终止与线程生命期的终止与Stopped状态状态 中国高等职业技术教育研究会中国高等职业技术教育研究会 & CEAC信息化培训认证管理办公室信息化培训认证管理办公室 优先级Highest优先级AboveNormal优先级Normal优先级BelowNormal优先级LowestABCDEF就绪线程图11-3 线程优先级调试11.3 线程优先级和线程调度线程优先级和线程调度 中国高等职业技
20、术教育研究会中国高等职业技术教育研究会 & CEAC信息化培训认证管理办公室信息化培训认证管理办公室 例例11-1 11-1 线程基本处理技术程序。线程基本处理技术程序。目的:目的: 使读者学会如何构造一个使读者学会如何构造一个ThreadThread对象以及如何使用对象以及如何使用ThreadThread类的类的StartStart方法和方法和SleepSleep方法。方法。义务:义务: 创建两个具有创建两个具有NormalNormal默认优先级的线程,每个线程运行后都先显示默认优先级的线程,每个线程运行后都先显示一条消息,指出它要随机休眠一条消息,指出它要随机休眠010000ms0
21、10000ms的时间,然后进入休眠状态。的时间,然后进入休眠状态。每个线程被唤醒时,都显示一条消息指出它的名称,并指出它已结束休每个线程被唤醒时,都显示一条消息指出它的名称,并指出它已结束休眠并进入眠并进入StoppedStopped状态。状态。 11.4 多线程编程示例多线程编程示例 中国高等职业技术教育研究会中国高等职业技术教育研究会 & CEAC信息化培训认证管理办公室信息化培训认证管理办公室 步骤:步骤: 1 1创建控制台应创建控制台应用程序用程序ThreadTestThreadTest,如图如图11-411-4所示。所示。 图11-4 新建项目11.4 多线程编程示例多线程编
22、程示例 中国高等职业技术教育研究会中国高等职业技术教育研究会 & CEAC信息化培训认证管理办公室信息化培训认证管理办公室 2 2添加新类。右键单击添加新类。右键单击“解决方案资源管理器中的解决方案资源管理器中的“源文源文件件”,在弹出菜单中选择,在弹出菜单中选择“添加添加”/ /“添加类添加类”,为程序添加一个,为程序添加一个C+C+新新类类MessagePrinterMessagePrinter,我们将在该类中定义一个,我们将在该类中定义一个PrintPrint方法,其中包方法,其中包含了每个线程所要执行的操作。如图含了每个线程所要执行的操作。如图11-511-5和图和图11-61
23、1-6。 11.4 多线程编程示例多线程编程示例 中国高等职业技术教育研究会中国高等职业技术教育研究会 & CEAC信息化培训认证管理办公室信息化培训认证管理办公室 图11-5 添加类1)11.4 多线程编程示例多线程编程示例 中国高等职业技术教育研究会中国高等职业技术教育研究会 & CEAC信息化培训认证管理办公室信息化培训认证管理办公室 11.4 多线程编程示例多线程编程示例11-6 添加类2) 中国高等职业技术教育研究会中国高等职业技术教育研究会 & CEAC信息化培训认证管理办公室信息化培训认证管理办公室 3 3定义定义MessagePrinterMessage
24、Printer类。该类包括一个类。该类包括一个sleepTimesleepTime变量,变量,staticstatic变量变量randomrandom,一个构造函数以及一个,一个构造函数以及一个PrintPrint方法。方法。 4 4创建线程对象。创建线程对象。11.4 多线程编程示例多线程编程示例 中国高等职业技术教育研究会中国高等职业技术教育研究会 & CEAC信息化培训认证管理办公室信息化培训认证管理办公室 程序每次程序每次运行,得到的运行,得到的结果都不相同,结果都不相同,因为线程的休因为线程的休眠时间是随机眠时间是随机的。如图的。如图11-711-7和图和图11-811-8所
25、示。所示。 Starting threadsthread1 going to sleep for 472Thread startedthread2 going to sleep for 6711thread1 done sleeping thread2 done sleepingStarting threadsThread startedthread1 going to sleep for 7208thread2 going to sleep for 4603thread2 done sleepingthread1 done sleeping图图11-7 ThreadTest11-7 Thre
26、adTest程序程序运行结果运行结果1 1)图图11-8 ThreadTest11-8 ThreadTest程序程序运行结果运行结果2 2)11.4 多线程编程示例多线程编程示例 中国高等职业技术教育研究会中国高等职业技术教育研究会 & CEAC信息化培训认证管理办公室信息化培训认证管理办公室 线程同步的理解线程同步的理解 如何实现线程同步如何实现线程同步 3 3、线程同步示例、线程同步示例 11.5 线程同步线程同步 中国高等职业技术教育研究会中国高等职业技术教育研究会 & CEAC信息化培训认证管理办公室信息化培训认证管理办公室 例例11-2 11-2 多线程同步程序。多线
27、程同步程序。目的:学会如何使多线程同步。目的:学会如何使多线程同步。义务:义务: 创建两个具有默认优先级的线程,其中一个线程为创建两个具有默认优先级的线程,其中一个线程为“生产者线程生产者线程”,用来生成数据;另一个线程为用来生成数据;另一个线程为“消费者线程消费者线程”,用来读取数据。要求两个,用来读取数据。要求两个线程能够同步,即当共享内存单元内没有数据时,生产者线程生成数据,线程能够同步,即当共享内存单元内没有数据时,生产者线程生成数据,此时消费者线程应等待而不能读取数据,生产者线程生成数据后,调用此时消费者线程应等待而不能读取数据,生产者线程生成数据后,调用PulsePulse方法,使
28、消费者线程得以继续;当共享内存单元内有数据时,消费方法,使消费者线程得以继续;当共享内存单元内有数据时,消费者线程读取数据,此时生产者线程应等待而不能生成数据,消费者线程者线程读取数据,此时生产者线程应等待而不能生成数据,消费者线程读取数据之后,调用读取数据之后,调用PulsePulse方法,从而使生产者线程继续。方法,从而使生产者线程继续。 案例分析案例分析 中国高等职业技术教育研究会中国高等职业技术教育研究会 & CEAC信息化培训认证管理办公室信息化培训认证管理办公室 步骤:步骤: 1 1创建控制台应用程序创建控制台应用程序SynchronizeSynchronize。 2 2添
29、加新类添加新类visitbufvisitbuf。 3 3添加新类添加新类ProducerProducer。 4 4添加新类添加新类ConsumerConsumer。 5 5编写编写Synchronize.cppSynchronize.cpp文件。文件。案例分析案例分析 中国高等职业技术教育研究会中国高等职业技术教育研究会 & CEAC信息化培训认证管理办公室信息化培训认证管理办公室 掌握多线程处理的基本概念,熟练利用掌握多线程处理的基本概念,熟练利用ThreadThread类创建、类创建、执行和管理线程。执行和管理线程。 线程的各种状态以及各状态之间的转换。线程的各种状态以及各状态之间
30、的转换。 掌握线程同步的概念和实现。掌握线程同步的概念和实现。 线程同步的实现。线程同步的实现。重点和难点重点和难点 中国高等职业技术教育研究会中国高等职业技术教育研究会 & CEAC信息化培训认证管理办公室信息化培训认证管理办公室 通过对线程和进程的理解,对线程进行处理应包括通过对线程和进程的理解,对线程进行处理应包括哪些步骤?哪些步骤? 如何在如何在WindowsWindows环境下实现线程同步?环境下实现线程同步? 讨论讨论 中国高等职业技术教育研究会中国高等职业技术教育研究会 & CEAC信息化培训认证管理办公室信息化培训认证管理办公室 本章的重点掌握多线程处理基本概念,熟练操作利用本章的重点掌握多线程处理基本概念,熟练操作利用ThreadThread类创建、执行和管理线程,难点是线程的各种状态以类创建、执行和管理线程,难点是线程的各种状态以及各状态之间的转换。及各状态之间的转换。 构造一个构造一个ThreadThread对象以及掌握如何使用对象以及掌握如何
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中班英语教学教案:Our animal friends
- 中班体育教案活动:班级运动会
- 中班健康详案教案:蚂蚁运粮
- 临时用电施工方案实施中的常见问题
- 国际会议中心餐饮策划方案
- 一年级下册数学教案-7.1找规律∣人教新课标
- 幕墙系统维护与检修方案
- 2024年农产品加工设备租赁合同
- 房地产开发风险分级管理体系
- 2024年化肥农药联合采购协议
- YD_T 3956-2021 电信网和互联网数据安全评估规范_(高清版)
- 杭州会展业发展与对策研究文献综述
- 完整版方法验证报告模板最终
- 2022年物业管理师《物业管理实务》考试题库大全-下(多选题、简答)
- 大班科学活动教案《豆豆家族》含PPT课件
- 压力管道检验员在线考试习题与答案
- 【精品试卷】部编人教版(统编)一年级上册语文第一单元测试卷含答案
- 金属有机化学ppt课件
- 应急管理试题库
- 工地观摩学习心得体会三篇
- 当当网与电子商务47条标准
评论
0/150
提交评论