飞道的博客

C#编程篇 第06部分 多线程

209人阅读  评论(0)

第06部分 多线程


1> 进程

  • 进程process是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。即打开一个应用程序就是打开操作系统上的一个进程,进程之间相互独立运行互不干扰,进程之间也可以互相访问,操作。

2> 线程

  • 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中实际运作单位,一条线程指的是进程中一个单一顺序的控制流,一个进程可以并发多个线程,VS程序都在主线程中。(表示为代码从上到下运行的一条管线)

  • 多线程:通过代码开启新的线程,同时运行代码的多条管线称之为多线程。


3> 线程语法相关


3.1 线程类Thread

》using System.Threading;


3.2 声明一个新的线程

线程执行的代码,需要封装到一个函数中

Thread t = new Thread(方法名)+4个重载
  • 其中()是指有一个委托无参无返回和一个有参无返回,也可以设置分配给新开线程的堆栈大小(int,字节)为0,默认为最大,不可以设置负数,参数过大会被忽略。
  • 新线程,将要执行的代码逻辑,被封装到方法中,专用于新开线程声明的参数,配合委托多播,事件订阅等。

3.3 启动线程

    t.Start();//t.Start(obj)//带参线程
  • 当新线程为死循环时,主线程关闭,新线程也不会停止,互不干扰。

3.4 设置为后台线程

  • 当前后台进程结束的时候,整个程序都停止了,即使还有后台线程正在运行,后台线程不会防止应用程序的进程被终止掉,若不设置为后台线程,可能导致进程无法正常关闭。
    t.IsBackground = true;//设置为后台线程

3.5 关闭释放一个线程

  1. 若该线程不是死循环,则是能够结束的逻辑。
  2. 若为死循环,中止该线程,有两种方式:
    1. 在循环bool判定的表达式换成bool标识符外部声明:bool isRunning = true;线程不停,将isRunning = false;线程停止
    2. t = null;表示线程置空,放在开启前会引发异常。可以使用t.Abort()关闭线程,此方法在CoreVS版本不能使用。

3.6 线程休眠

  • 休眠方法是Thread中的静态方法,存在于哪个线程,哪个线程执行休眠指令。
Thread.Sleep(10000)//单位毫秒,1s = 1000ms
表示每10s休眠一次线程。

3.7 线程之间的共享数据

  • 多个线程使用的内存是共享的,都属于该应用程序进程,当多个线程同时操作同一片内存区域时,可能会成本弧线问题,数据修改异常等。

  • 通知Lock的形式避免问题

Lock(引用类型对象)//object obj
{
 语句块 
}
  • 当多个线程当中想要访问同样的数据时,进行逻辑处理时,为了避免不必要的逻辑顺序执行的差错。
lock(obj){ 语句块 }//1
lock(obj){ 语句块 }//2
  • 同一引用对象obj,多线程运行的时候会等obj进入第一个线程语句结束后,跳转到下一个线程,上个线程会暂时停止,直到obj重新进入。

3.8 多线程对于我们的意义

  • 可以用多线程专门处理一些复杂耗时的处理,比如寻路,网格通信等。


转载:https://blog.csdn.net/weixin_52566131/article/details/116427355
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场