c程序设计教程课件完整版

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

c程序设计教程课件集团标准化办公室:[VV986T-J682P28-JP266L8-68PNN]

本文由x4168138贡献

ppt文档可能在WAP端浏览体验不佳。建议您优先选择TXT,或下载源文件到

本机查看。

第9章多线程

本章内容

9.1 一个简单的多线程应用程序 9.2 线程及其实现方法 9.3 线程的同步控制9.4 线程池 9.5 线程对控件的访问

9.1 一个简单的多线程应用程序 C#程序设计教程——蒙祖强编着

本小节创建的多线程应用程序一共包含两个线程,本小节创建的多线程应用

程序一共包含两个线程,这两个线程并发地在屏幕上输出相关的字符串。发地在屏幕上输出相关的字符串。程序的关键代码如下:程序的关键代码如下:

class A { public static int n = 0; public void f() { for (int i = 0;

i < 10; i ) { Console.WriteLine("f()在输出:{0}", A.n); 在输出:在输出

A.n ; 让当前线程 Thread.Sleep(100); 睡眠100毫秒睡眠毫秒 } } }

9.1 一个简单的多线程应用程序 C#程序设计教程——蒙祖强编着

class B { public static void g() { for (int i = 0; i < 10; i )

{ Console.WriteLine("g()在输出:{0}", A.n); 在输出:在输出 A.n ; 让当

前线程 Thread.Sleep(100); 睡眠100毫秒睡眠毫秒 } } } static void

Main(string[] args) { A a = new A(); ThreadStart thst1 = new

ThreadStart(a.f); 建立委托对象,建立委托对象,使之创建线程thst1 创建

线程每个线程实际上是可见,与给定的方法相关联类可见,每个线程实际上

是Thread类 ThreadStart thst2 = new ThreadStart(B.g); 的对象,它是通过Thread类的构造的对象,它是通过类的构造 Thread th1 = new Thread(thst1); 函数来创建;函数来创建;并且每个线程都与既 Thread th2 = new

Thread(thst2); 定的方法相关联 th1.Start(); 启动线程创建线程thst2 创建

线程 th2.Start(); Console.ReadKey(); }

——由这个例子可以看到,Thread类、委托类型由这个例子可以看到,由

这个例子可以看到类委托类型ThreadStart等——执行线程和th2实际上是执行方法执行线程th1和实际上是执行方法a.f()和方法和方法B.g()。等。

执行线程实际上是执行方法和方法是多线程程序设计中的核心内容。是多线程程序设计中的核心内容。

9.2 线程及其实现方法

9.2.1 线程的概念

C#程序设计教程——蒙祖强编着

线程的概念与程序、进程的概念密切相关。线程的概念与程序、进程的概念

密切相关。程序是程序员编写的静态代码文本。程序是程序员编写的静态代码文本。是程序员编写的静态代码文本进程则是程序的一次动态执行过程,进程则

是程序的一次动态执行过程,进程运行时需要占用装载则是程序的一次动态执行

过程程序代码(编译后的可执行代码)程序代码(编译后的可执行代码)以及存放其所需数据的内存空间和其他的机器资源(如文件等),),当进程终止时这些内存空间间和其他的机器资源(如文件等),当进程终止时这些内存空间和资

源也随之释放。显然,同一个程序,和资源也随之释放。显然,同一个程序,它可以被多次加载到不同的内存区域中、使用不同的机器资源,同的内存区域中、使用不同的机器资源,从而形成多个不同的进即一个程序可以形成多个进程。程,即一个程序可以形成多个进程。一个进程是由多个执行单元组成,每个执行单元就是一个线程,一个进程是由多个执行单元组成,每个执行单元就是一个线程,即进程是由多个线程组成。即进程是由多个线程组成。每个线程都共享着其进程所占用的内存空间和机器资源(如堆栈、),实际上存空间和机器资源(如堆栈、CPU、寄存器等),实际上,一个、寄存器等),实际上,线程是一组机器指令以及它共享的内存和资源是一组机器指令以及它共享的内存和资源。线程是一组机器指令以及它共享的内存和资源。

9.2 线程及其实现方法

9.2.1 线程的概念线程和进程的主要区别在于:线程和进程的主要区别在于:

C#程序设计教程——蒙祖强编着

进程是由多个线程组成,即线程是进程的一个组成部分。进程是由多个线程组成,即线程是进程的一个组成部分。线程的划分尺度小,具有较高的并发效率。线程的划分尺度小,具有较高的并发效率。进程独占相应的内存和资源(其他进程不能使用),线程则是进程独占相应的内存和资源(其他进程不能使用),线程则是),共享进程所拥有的内存和资源(其他线程也可以使用),),从而极共享进程所拥有的内存和资源(其他线程也可以使用),从而极大地提高运行效率。大地提高运行效率。进程提供多个线程执行控制,而每个线程只能有一个运行入口、进程提供多个线程执行控制,而每个线程只能有一个运行入口、顺序执行序列和出口(线序”执行)。顺序执行序列和出口(“线序”执行)。进程可以独立执行,但线程不能独立执行,进程可以独立执行,但线程不能独立执行,而必须依赖于进程所提供的环境。所提供的环境。 9.2 线程及其实现方法

9.2.2 线程的实现方法

C#程序设计教程——蒙祖强编着

线程的创建和应用主要是由Thread类和线程的创建和应用主要是由类和ThreadStart委托来实现。委托来实现。类和委托来实现 Thread类的构造函数和主要方法说明如下:类的构造函数和主要方法说明如下:类的构造函数和主要方法说明如下构造函数 Thread类构造函数的作用是用于创建线程,它主要有两个重载版类构造函数的作用是用于创建线程,类构造函数的作用是用于创建线程本:构造函数创建的线程关联没

有参数的方法

public Thread(ThreadStart start) public

Thread(ParameterizedThreadStart start) ——每个线程都必须关联一个无返回类型的方法(称为线程方每个线程都必须关联一个无返回类型的方法(每个线程都必须关联一个无返回类型的方法),如果关联的方法无参数类型或构造函数创建的线程关联带法),如果关联的方法无参数,则用第一个构造函数创建线程;其中,参数参数start是ThreadStart类型或类型或

相关文档
最新文档