C#程序设计 Ch10_第1页
C#程序设计 Ch10_第2页
C#程序设计 Ch10_第3页
C#程序设计 Ch10_第4页
C#程序设计 Ch10_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2020/5/22,1,电子科大成都学院精品课程VisualC#.Net程序设计,C#程序设计,王奔bwang,2020/5/22,电子科大成都学院精品课程VisualC#.Net程序设计,2,第十章多线程编程技术,10.1多线程的概念10.2线程创建与控制10.3多线程的同步10.4线程池,2020/5/22,电子科大成都学院精品课程VisualC#.Net程序设计,3,10.1多线程的概念,一、什么是线程二、单线程与多线程,2020/5/22,电子科大成都学院精品课程VisualC#.Net程序设计,4,一、什么是线程,进程:应用程序的实例,一个正在运行的应用程序在操作系统中被视为一个进程。线程:作系统分配处理器时间的基本单元。它也是一组指令的集合,有时也被称之为“轻量级进程”或“微进程”。关系:一个进程可以包含一个或多个线程;线程都是在某个进程环境中创建的,而且其整个生存期都是在该进程中。,2020/5/22,电子科大成都学院精品课程VisualC#.Net程序设计,5,二、单线程与多线程,单线程:指一个进程中只能有一个线程,其他进程必须等待当前线程执行结束后才能执行。其缺点在于系统完成一个很小的任务都必须占用很长的时间。多线程:指将一个进程划分为几部分,由多个线程同时独立的完成,从而最大限度地利用处理器和用户的时间,提高系统的效率。,返回,2020/5/22,电子科大成都学院精品课程VisualC#.Net程序设计,6,10.2线程的创建与控制,一、创建和启动线程二、控制线程,2020/5/22,电子科大成都学院精品课程VisualC#.Net程序设计,7,一、创建和启动线程,创建线程:创建一个Thread类的对象。其参数用ThreadStart委托类,它指向一个指定的方法。例:Threadt1=newThread(newThreadStart(ft.Task)启动线程:t1.Start(),2020/5/22,电子科大成都学院精品课程VisualC#.Net程序设计,8,二、控制线程,线程存在多种状态,可由ThreadState属性来获取,其值如下:,2020/5/22,电子科大成都学院精品课程VisualC#.Net程序设计,9,(1)暂停和恢复线程,使用Thread.Sleep暂停单位是毫秒例Thread.Sleep(3000);线程暂停3秒钟其恢复用Thread.Interrupt()使用Thread.Suspend暂停与Sleep不同,它不会使线程立即停止执行其恢复用Thread.Resume()使用Thread.Join暂停强制一个线程等待另一个线程而停止,2020/5/22,电子科大成都学院精品课程VisualC#.Net程序设计,10,(2)中断和中止线程,使用Thread.Interrupt中断它会中断处于睡眠的线程,将其重新放回调度队列中例sleeper.Interrupt();/sleeper为线程对象使用Thread.Abort中止线程一旦终止后,无法通过再次调用Start()方法启动该线程。,返回,2020/5/22,电子科大成都学院精品课程VisualC#.Net程序设计,11,10.3多线程的同步,一、线程安全二、线程同步策略,2020/5/22,电子科大成都学院精品课程VisualC#.Net程序设计,12,一、线程安全,线程安全:指在多个线程并发使用某个对象时,该对象成员总是保持有效状态。常常表现为竞争资源和死锁现象。竞争资源:两个或多个线程同时访问同一数据或资源时会导致不符合要求或无法预期的结果。死锁:多个线程彼此等待对方释放其所占用的资源,最终导致线程的阻塞。,2020/5/22,电子科大成都学院精品课程VisualC#.Net程序设计,13,二、线程同步策略,(1)同步上下文(2)同步代码区(3)手工同步,2020/5/22,电子科大成都学院精品课程VisualC#.Net程序设计,14,(1)同步上下文,直接使用SynchronizationAttribute类的构造函数对驻留在上下文中、符合上下文规则的对象启用简单的自动同步,确保同一时刻只有一个线程可以访问该对象。,2020/5/22,电子科大成都学院精品课程VisualC#.Net程序设计,15,(2)同步代码区,使用Monitor监视器首先使用Monitor.Enter()方法获得一个锁,然后使用Monitor.Exit()方法释放该锁。示例10-5和10-6(见教材)使用C#中的Lock关键字只需要简单地用Lock语句将需要同步的代码括起来,括号表示受保护代码的起始点和终止点即可。,2020/5/22,电子科大成都学院精品课程VisualC#.Net程序设计,16,(3)手工同步,常用的手工同步类如下,返回,2020/5/22,电子科大成都学院精品课程VisualC#.Net程序设计,17,10.4线程池,一、线程池管理二、ThreadPool类,2020/5/22,电子科大成都学院精品课程VisualC#.Net程序设计,18,一、线程池管理,线程池管理:指在多线程应用程序的初始化过程中创建线程的集合,当需要线程时,为新任务重用这些线程,而不是创建新线程的过程。池中的每个线程都分派了一个任务,当完成任务时,该线程就返回线程池中等待下一次分派。,2020/5/22,电子科大成都学院精品课程VisualC#.Net程序设计,19,二、ThreadPool类,创建和使用线程池的步骤1.创建一个ThreadPool类的对象2.用QueueUserWorkItem方法将其任务项依次添加到线程池中示例10-7和10-8(见教材),2020/5/22,电子科大成都学院精品课程VisualC#.Net程序设计,20,本章要点,用.Net提供的Thread类创建和启动一个线程使用Thread.Sleep暂停一个线程以及用Thread.Interrupt中断恢复一个暂停的线程。使用Monitor监视器和C#的Lock关键字来实现线程间的同步。使用ThreadPool类来创建和使用线程池。,2

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论