(一)CSharp-多线程编程

本文介绍了C#中的多线程编程,包括进程与线程的概念、比较,详细阐述了C#中线程的操作、控制以及同步方法,如线程的创建、启动、休眠、挂起、继续和终止,并探讨了加锁、监视器和互斥体等线程同步机制。此外,通过模拟削苹果和吃苹果的示例,进一步说明多线程的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、进程与线程

1、进程
一个正在运行的程序的实例,是系统进行调度和资源分配的一个独立单位。

进程由两部分能组成:

(1)操作系统用来管理进程的内核对象。内核对象是系统的一种资源,系统对象一旦产生,任何应用程序都可以开启并使用该对象。系统给予内核对象一个计数值作为管理之用。

(2)操作系统用来管理地址的空间。它包含所有可执行模块或 DLL 模块的代码和数据。它还包含动态内存分配的空间,如线程堆栈和堆栈分配空间。

进程分为系统进程和用户进程。程序是静止的,二进程是动态的。

2、线程

一段完成某个特定功能的代码,是程序中的一个执行流。

线程由两个部分组成:

(1)操作系统用来管理线程的内核对象。内核对象也是系统用来存放线程统计信息的地方。
(2)另一个是线程的堆栈。它用于维护线程在执行代码时需要的所有函数的参数的局部变量。

线程是在它的进程地址空间中执行代码的,并且在地址的进程空间中对数据进行操作。

线程分为用户界面线程和工作线程。

1、线程与进程的比较

多进程是指在操作系统中能同时运行多个任务程序。

(1)进程的特点是允许计算机同时运行两个或更多的程序。

(2)在基于线程的多任务处理环境中,线程是最小的处理单位。

(3)多个进程的内部数据和状态都是完全独立的,而多线程共享一块内存空间和一组系统资源,有可能互相影响。

(4)线程本身的数据通常只有寄存器数据,以及一个程序执行时使用的堆栈,所以线程的切换比进程的切换负担要小。

二、C# 中多线程的开发

1、线程操作

System.Threading.Thread

表-Thread 类的常用属性

属性名 描述
CurrentThread 只读属性,获取当前正在运行的线程
IsAlive 判断线程是否处于活动状态
IsBackground 获取或设置一个值,该值指示某个线程是否为后台线程
IsThreadPoolThread 获取一个值,该值指示线程是否属于托管线程池
Name 获取或设置线程的名称
Priority ThreadPriority 枚举类型,代表线程的优先级,如:Normal、AboveNormal、BelowNormal、Highest、Lowest
ThreadState ThreadState 枚举类型,代表当前线程的状态,如:Unstarted、Running、WaitSleepJoin、Stopped、AbortRequested、Susppended、Aborted 等

表-Thread 类的常用方法

方法名 描述
GetDomain() 返回当前线程所在的应用程序域
GetDomainID() 返回当前线程所在的应用程序域的 ID
Start() 启动线程的执行
Suspend() 挂起线程,或者如果线程已挂起,则不起作用
Resume() 继续已挂起的线程
Interrupt() 终止处于 Wait 或者 Sleep 或者 Join 线程状态的线程
Join() 阻塞调用线程,直到某个线程终止时为止
Sleep() 将当前线程阻塞指定的毫秒数
Abort() 终止一个线程的运行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值