C程序设计 第七章 线程.ppt
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《C程序设计 第七章 线程.ppt》由会员分享,可在线阅读,更多相关《C程序设计 第七章 线程.ppt(29页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、C#程序设计与案例教程 清华大学出版社 第七章第七章 线程线程线程是程序运行的基本单元。多线程编程线程是程序运行的基本单元。多线程编程就是将程序任务分成几个并行的子任务,就是将程序任务分成几个并行的子任务,各个子任务相对独立地并发执行,这样可各个子任务相对独立地并发执行,这样可以提高程序的性能和效率。以提高程序的性能和效率。C#C#语言提供语言提供了内置的多线程机制。了内置的多线程机制。1 1版权所有版权所有C#程序设计与案例教程 清华大学出版社 目录n n线程及其创建线程及其创建n n线程的基本控制线程的基本控制n n线程同步线程同步n n线程通信线程通信n n线程池线程池2 2版权所有版权
2、所有C#程序设计与案例教程 清华大学出版社 7.1 线程及其创建线程及其创建n n线程与进程相似,是一段完成某个特定功能的线程与进程相似,是一段完成某个特定功能的代码,是程序中的一个执行流;但与进程不同代码,是程序中的一个执行流;但与进程不同的是,同一个类的多个线程是共享一块内存空的是,同一个类的多个线程是共享一块内存空间和一组系统资源,而线程本身的数据通常只间和一组系统资源,而线程本身的数据通常只有微处理器的寄存器数据,以及一个供程序执有微处理器的寄存器数据,以及一个供程序执行时使用的堆栈。所以系统在产生一个线程,行时使用的堆栈。所以系统在产生一个线程,或者在各个线程之间切换时,负担要比进程
3、小或者在各个线程之间切换时,负担要比进程小的多,正因如此,线程被称为轻量级进程。的多,正因如此,线程被称为轻量级进程。3 3版权所有版权所有C#程序设计与案例教程 清华大学出版社 7.1.1线程与进程的比较线程与进程的比较(1 1)基于进程的特点是允许计算机同时运行两)基于进程的特点是允许计算机同时运行两)基于进程的特点是允许计算机同时运行两)基于进程的特点是允许计算机同时运行两个或更多的程序。个或更多的程序。个或更多的程序。个或更多的程序。(2 2)基于线程的多任务处理环境中,线程是最)基于线程的多任务处理环境中,线程是最)基于线程的多任务处理环境中,线程是最)基于线程的多任务处理环境中,线
4、程是最小的处理单位。小的处理单位。小的处理单位。小的处理单位。(3 3)多个进程的内部数据和状态都是完全独立)多个进程的内部数据和状态都是完全独立)多个进程的内部数据和状态都是完全独立)多个进程的内部数据和状态都是完全独立的,而多线程是共享一块内存空间和一组系的,而多线程是共享一块内存空间和一组系的,而多线程是共享一块内存空间和一组系的,而多线程是共享一块内存空间和一组系 统统统统资源资源资源资源,有可能互相影响。有可能互相影响。有可能互相影响。有可能互相影响。(4 4)线程本身的数据通常只有寄存器数据,以)线程本身的数据通常只有寄存器数据,以)线程本身的数据通常只有寄存器数据,以)线程本身的
5、数据通常只有寄存器数据,以及一个程序执行时使用的堆栈,所以线程的切及一个程序执行时使用的堆栈,所以线程的切及一个程序执行时使用的堆栈,所以线程的切及一个程序执行时使用的堆栈,所以线程的切换比进程切换的负担要小。换比进程切换的负担要小。换比进程切换的负担要小。换比进程切换的负担要小。4 4版权所有版权所有C#程序设计与案例教程 清华大学出版社 7.1.27.1.2线程的优点线程的优点线程的优点线程的优点 有多个线程的进程能够用线程管理互斥的任务,比如提有多个线程的进程能够用线程管理互斥的任务,比如提供用户一个界面和完成后台计算。创建一个多线程的供用户一个界面和完成后台计算。创建一个多线程的进程能
6、够方便地让程序并发执行几个类似的或相同的进程能够方便地让程序并发执行几个类似的或相同的任务。任务。例如,单个应用程序域可以使用多个线程来完成以下任例如,单个应用程序域可以使用多个线程来完成以下任务:务:(1 1)通过网络与)通过网络与 Web Web 服务器和数据库进行通信。服务器和数据库进行通信。(2 2)执行占用大量时间的操作。)执行占用大量时间的操作。(3 3)区分具有不同优先级的任务。例如,高优先级线程)区分具有不同优先级的任务。例如,高优先级线程管理时间关键的任务,低优先级线程执行其他任务。管理时间关键的任务,低优先级线程执行其他任务。(4 4)使用户界面可以在将时间分配给后台任务时
7、仍能快)使用户界面可以在将时间分配给后台任务时仍能快速作出响应。速作出响应。5 5版权所有版权所有C#程序设计与案例教程 清华大学出版社 7.1.37.1.3建立线程建立线程创建线程的基本步骤如下:创建线程的基本步骤如下:(1 1)声明该线程。)声明该线程。System.Threading.ThreadSystem.Threading.Thread myThreadmyThread;(2 2)用线程起始点的适当委托实例化该线程。在)用线程起始点的适当委托实例化该线程。在 C#C#中中创建新的创建新的ThreadStartThreadStart 对象。对象。myThreadmyThread=ne
8、w =new System.Threading.Thread(newSystem.Threading.Thread(new System.Threading.ThreadStSystem.Threading.ThreadStart(myStartingMethodart(myStartingMethod););(3 3)调用)调用 Thread.StartThread.Start()()方法启动线程。方法启动线程。myThread.StartmyThread.Start();();6 6版权所有版权所有C#程序设计与案例教程 清华大学出版社 【案例案例案例案例7-17-1】随机画圆。随机画圆。
9、n n本案例是一个随机画圆本案例是一个随机画圆的程序。每次画的位置、的程序。每次画的位置、大小、颜色都是随机的。大小、颜色都是随机的。7 7版权所有版权所有C#程序设计与案例教程 清华大学出版社 7.2 线程的基本控制线程的基本控制n n线程从创建到灭亡主要经历五种状态,借助线程从创建到灭亡主要经历五种状态,借助ThreadThread类所提供的方法,我们可以实现这些状类所提供的方法,我们可以实现这些状态之间的转换,从而达到对线程的控制。通过态之间的转换,从而达到对线程的控制。通过本节内容重点掌握线程的基本控制方法、线程本节内容重点掌握线程的基本控制方法、线程的优先级及其他有关概念。的优先级及
10、其他有关概念。8 8版权所有版权所有C#程序设计与案例教程 清华大学出版社 7.2.1线程的状态n n一个线程从被创建到停止执行要经历一个完整一个线程从被创建到停止执行要经历一个完整的生命周期。在这个生命周期中线程处于不同的生命周期。在这个生命周期中线程处于不同的状态。线程的状态用来表明线程的活动情况的状态。线程的状态用来表明线程的活动情况及线程在当前状态中能够完成的功能。线程的及线程在当前状态中能够完成的功能。线程的生命周期有五种状态。生命周期有五种状态。9 9版权所有版权所有C#程序设计与案例教程 清华大学出版社 7.2.2 Thread7.2.2 Thread类和线程控制类和线程控制1
11、1ThreadThread主要的属性主要的属性主要的属性主要的属性(1 1)CurrentThreadCurrentThread:获取当前正在运行的线程。获取当前正在运行的线程。(2 2)IsAliveIsAlive:获取一个值获取一个值,该值指示当前线程的执行状该值指示当前线程的执行状态。态。(3 3)IsBackgroundIsBackground:获取或设置一个值,该值指示某个:获取或设置一个值,该值指示某个线程是否为后台线程。线程是否为后台线程。(4 4)IsThreadPoolThreadIsThreadPoolThread:获取一个值,该值指示线程:获取一个值,该值指示线程是否属于
12、托管线程池。是否属于托管线程池。(5 5)NameName:获取或设置线程的名称。:获取或设置线程的名称。(6 6)PriorityPriority:获取或设置一个值,该值指示线程的调度:获取或设置一个值,该值指示线程的调度优先级。优先级。1010版权所有版权所有C#程序设计与案例教程 清华大学出版社 2 2ThreadThread的主要方法的主要方法的主要方法的主要方法(1 1)Abort()Abort():在调用此方法的线程上引发在调用此方法的线程上引发 ThreadAbortExceptionThreadAbortException,以开始终止此线程的过程。调以开始终止此线程的过程。调用
13、此方法通常会终止线程。用此方法通常会终止线程。(2 2)Interrupt()Interrupt():中断处于:中断处于 WaitSleepJoinWaitSleepJoin 线程状态的线线程状态的线程。程。(3 3)Join()Join():阻塞调用线程,直到某个线程终止时为止。:阻塞调用线程,直到某个线程终止时为止。(4 4)ResetAbortResetAbort()():取消为当前线程请求的:取消为当前线程请求的 AbortAbort。(5 5)Resume()Resume():继续已挂起的线程。:继续已挂起的线程。(6 6)Sleep(intSleep(int):将当前线程阻塞指定的
14、毫秒数。:将当前线程阻塞指定的毫秒数。(7 7)Start()Start():导致操作系统将当前实例的状态更改为:导致操作系统将当前实例的状态更改为 ThreadState.RunningThreadState.Running。(8 8)Suspend()Suspend():挂起线程,或者如果线程已挂起,则:挂起线程,或者如果线程已挂起,则不起作用。不起作用。(9 9)ThreadStateThreadState()():获取一个值,该值包含当前线程的:获取一个值,该值包含当前线程的状态。状态。1111版权所有版权所有C#程序设计与案例教程 清华大学出版社 【案例案例案例案例7-27-2】图像
15、浏览程图像浏览程序。序。n n本案例是一个图像浏览本案例是一个图像浏览程序,能够自动切换图程序,能够自动切换图片,并可以通过片,并可以通过“开始开始”、“停止停止”、“暂停暂停”、“恢复恢复”、“下页下页”、“上页上页”等按钮控等按钮控制图像的浏览。制图像的浏览。1212版权所有版权所有C#程序设计与案例教程 清华大学出版社 7.3 线程同步线程同步n n在包含多个线程的应用程序中,线程间有时会在包含多个线程的应用程序中,线程间有时会共享存储空间。当两个或多个线程同时访问同共享存储空间。当两个或多个线程同时访问同一共享资源时,必然会出现冲突问题。如,一一共享资源时,必然会出现冲突问题。如,一个
16、线程可能尝试从一个文件中读取数据,而另个线程可能尝试从一个文件中读取数据,而另一个线程则尝试在同一文件中修改数据。在这一个线程则尝试在同一文件中修改数据。在这种情况下,数据可能会变的不一致。我们需要种情况下,数据可能会变的不一致。我们需要做的是允许一个线程彻底完成其任务后,再允做的是允许一个线程彻底完成其任务后,再允许下一个线程执行。必须保证一个共享资源一许下一个线程执行。必须保证一个共享资源一次只被一个线程使用。实现此目的的过程称为次只被一个线程使用。实现此目的的过程称为同步同步同步同步。1313版权所有版权所有C#程序设计与案例教程 清华大学出版社 7.3.1 使用lock()语句n n多
17、个线程共享资源时,多个线程共享资源时,C#C#提供了提供了locklock,它可以,它可以把一段代码定义为互斥段,互斥段在一个时刻把一段代码定义为互斥段,互斥段在一个时刻内只允许一个线程进入执行,而其他线程必须内只允许一个线程进入执行,而其他线程必须等待。基本的格式为:等待。基本的格式为:locklock(对象或类对象或类)语句块语句块1414版权所有版权所有C#程序设计与案例教程 清华大学出版社 【案例案例案例案例7-37-3】模拟取款程模拟取款程序。序。n n本案例模拟取款程序,本案例模拟取款程序,有一笔存款,三个人同有一笔存款,三个人同时在取钱,每个人可取时在取钱,每个人可取5 5次,每
18、次当取款时,次,每次当取款时,若数额超过现有的存款若数额超过现有的存款额,那么取款被拒绝。额,那么取款被拒绝。要保证一个人正在取款要保证一个人正在取款时,另一个人不能取。时,另一个人不能取。存款的数额永远不为负。存款的数额永远不为负。1515版权所有版权所有C#程序设计与案例教程 清华大学出版社 7.3.2 Monitor7.3.2 Monitor类类 在实现线程同步时,可以使用在实现线程同步时,可以使用MonitorMonitor类。该类通过向类。该类通过向单个线程授予对象锁来控制对对象的访问。对象锁提单个线程授予对象锁来控制对对象的访问。对象锁提供限制访问代码块(通常称为临界区)的能力。当
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C程序设计 第七章 线程 程序设计 第七
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内