C#线程基础知识

本文介绍了C#中的线程基础知识,包括多线程与多进程的区别、进程与线程的概念、Thread类的使用,如构造函数和方法,以及线程优先级和同步锁的概念。通过实例解释了如何在C#中实现线程的管理和同步,帮助理解线程在并发执行中的重要性。

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

多线程和多进程的区别

任务管理器里各种不同的进程就是多进程,或者是你同时运行多个”.exe’程序就可以理解为多进程,多进程是要更多消耗CPU资源的。

多线程是相对于进程里更小的单位,比如3个线程在1个进程里进行不同的操作,他们所拥有的资源就是那个进程里的资源,不会占用更多资源,只是通过线程更合理的分配资源。

 

运行一个控制台项目.exe,就会生成一个进程,在此进程中会生成一条主线程(主要负责执行Main函数中的代码);

 

什么是进程?

进程(Process)是Windows系统中的一个基本概念,它包含着一个运行程序所需要的资源。

一个正在运行的应用程序在操作系统中被视为一个进程,进程可以包括一个或多个线程。

 

什么是线程?

线程是操作系统分配处理器时间的基本单元,也是一个独立的运行单 元,每个进程内部都有多个线程,每个线程都可以各自同时执行指令。每个线程都有自己独立的栈,但是与进程内的其他线程共享内存。但是对于.NET的客户端程序(Console,WPF,WinForms)是由CLR创建的单线程(主线程,且只创建一个线程)来启动。在该线程上可以创建其他线程。

 

Thread类:

构造函数:

Thread(ThreadStart method)  无参无返回值类型的方法

Thread(ParameterizedThreadStart method) 无返回值类型,有一个object参数的方法

属性:

static CurrentThread 返回当前正在运行的线程

Name 设置/返回线程的名字

IsBackground 是否是后台线程

Priority 设置优先级的

方法:

Start() 启动线程,调用无参无返回值的函数

Start(Object pram) 启动线程,pram传参给有参数的方法; 

Sleep(int 毫秒) 让线程休眠,处于暂停执行的状态

Abort() 终止线程

Join(int 毫秒) 挂起(暂停)正在调度的线程,直到被调度的线程执行完毕后,该线程才继续执行

 

线程优先级

系统优先执行优先级较高的线程

但这只意味着优先级较高的线程占有更多的CPU时间

并不意味着一定要先执行完优先级较高的线程,才会执行优先级较低的线程。

 

 

同步锁

lock 关键字可确保当一个线程位于代码的临界区时,另一个线程不会进入该临界区。 如果其他线程尝试进入锁定的代码,则它将一直等待(即被阻止),直到该对象被释放。

 lock 关键字在块的开始处调用 Enter,而在块的结尾处调用 Exit

 

 在多线程中,每个线程都有自己的资源,但是代码区是共享的,即每个线程都可以执行相同的函数。这可能带来的问题就是几个线程同时执行一个函数,导致数据的混乱,产生不可预料的结果,因此我们必须避免这种情况的发生。 

 

打个比方,有这样一个情景,很多公司所在的大厦的厕所的蹲位都是小单间型的,也就是一次只能进去一个人,那么为了避免每次进去一个 人,那怎么做呢?不就是一个人进去之后顺手把门锁上么?这样你在里面干啥事,外边的人也只能等待你解放完了,才能进入。而蹲位的资源(蹲位,手纸等)是共享的。

常用的锁的格式如下:

private static readOnly Object lockObj=new Object(); 

public void Fun(){
lock(lockObj){
//执行代码
}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值