- 1、本文档共43页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第10章 线程 10.1基本概念 10.2 线程的处理 10.3线程的同步 10.4线程池的处理 10.5计时器 10.1基本概念 20世纪60年代,人们提出了进程的概念,进程是操作系统中能拥有资源和独立运行的基本单位。直到20世纪80年代初,人们又提出了比进程更小的能独立运行的基本单位——线程(Threads);试图用它来提高系统内程序并发执行的程度,从而可以进一步提高系统的吞吐量。特别是进入20世纪90年代后,多处理机系统得到迅速发展,线程比进程能更好的提高程序的并行执行程度,充分发挥多处理机的优越性。 线程 线程是程序中的一个执行流,每个线程都有自己的专有寄存器(栈指针、程序计数器等),但代码区是共享的,即不同的线程可以执行同样的函数。多线程是指程序中包含多个执行流,即在一个程序中可以同时运行多个不同的线程来执行不同的任务,也就是说允许单个程序创建多个并行执行的线程来完成各自的任务。浏览器就是一个很好的多线程的例子,在浏览器中你可以在下载浏览网页的同时下载流行音乐。 多线程的好处在于可以提高CPU的利用率。 线程的特点: (1)原子性 (2)死锁 (3)不确定性 线程本身可能影响系统性能的不利方面 线程也是程序,所以线程需要占用内存,线程越多占用内存也越多; 多线程需要协调和管理,所以需要CPU时间跟踪线程 ; 线程之间对共享资源的访问会相互影响,必须解决竞用共享资源的问题; 线程太多会导致控制太复杂,最终可能造成很多Bug。 10.2 线程的处理 10.2.1 System.Threading命名空间 10.2.2 创建和终止线程 所有与多线程机制应用相关的类都是放在System.Threading命名空间中的。线程是使用Thread类来处理的 10.2.1 System.Threading命名空间 System.Threading 命名空间提供一些使得可以进行多线程编程的类和接口。除同步线程活动和访问数据的类(Mutex、Monitor、Interlocked、AutoResetEvent等)外,此命名空间还包含一个ThreadPool类(它允许用户使用系统提供的线程池)和一个 Timer类(它在线程池线程上执行回调方法)。 【例10-1】通过Thread类获取当前线程示例 using System; using System.Collections.Generic; using System.Text; using System.Threading; namespace testThread { class testThread { static void Main(string[] args) { Thread.CurrentThread.Name = System Thread; //给当前线程起名为System Thread Console.WriteLine(Thread.CurrentThread.Name + Status: + Thread.CurrentThread.ThreadState); Console.ReadLine(); } } } 输出结果 在这里,我们通过Thread类的静态属性CurrentThread获取了当前执行的线程,对其Name属性赋值“System Thread”,最后还输出了它的当前状态(ThreadState)。就像上面程序所演示的,我们通过Thread类来创建和控制线程。注意到程序的头部,我们使用了如下命名空间:using System.Threading。 10.2.2 创建和终止线程 多线程编程中最重要的是Thread类 1、创建Thread类 Thread类的构造函数的原型有四种,常用的为如下两种: a、Public Thread( ThreadStart start); 参数start为ThreadStart委托,它表示此线程开始执行时要调用的方法。 b、public Thread(ParameterizedThreadStart start): 初始化Thread类的新实例,指定允许对象在线程启动时传递给线程的委托。 【例10-2】通过Thread类创建线程示例 ThreadConstructor1.cs using System; using System.Collections.Generic; using System.Text; usin
文档评论(0)