C#多线程与线程同步机制高级实战教程

kuaidelasi · · 135 次点击 · 开始浏览    置顶

一、基本概念(/s/1jTcnnli00efySGsBijB34w 提取码: tisk) 进程:当一个程序开始运行时,它就是一个进程,进程包括运行中的程序和程序所使用到的内存和系统资源。而一个进程又是由多个线程所组成的。 线程:线程是程序中的一个执行流,每个线程都有自己的专有寄存器(栈指针、程序计数器等),但代码区是共享的,即不同的线程可以执行同样的函数。 多线程:多线程是指程序中包含多个执行流,即在一个程序中可以同时运行多个不同的线程来执行不同的任务,也就是说允许单个程序创建多个并行执行的线程来完成各自的任务。 静态属性:这个类所有对象所公有的属性,不管你创建了多少个这个类的实例,但是类的静态属性在内存中只有一个。 二、多线程的优劣 优点:可以提高CPU的利用率。在多线程程序中,一个线程必须等待的时候,CPU可以运行其它的线程而不是等待,这样就大大提高了程序的效率。 缺点:线程也是程序,所以线程需要占用内存,线程越多占用内存也越多; 多线程需要协调和管理,所以需要CPU时间跟踪线程; 线程之间对共享资源的访问会相互影响,必须解决竞用共享资源的问题; 线程太多会导致控制太复杂,最终可能造成很多Bug; 三、委托的异步调用 1 同步方法卡界面,Winform的UI线程在忙于计算,不能响应别的操作 异步多线程方法不卡界面,UI线程闲置,计算任务交给其他线程执行 Winform--点击个按钮不希望界面卡死 Web--写文本日志,发邮件,这正耗时操作其实可以多线程的 四、创建线程 C#中创建线程的方式有多种,其中最常用的方式是通过Thread类,示例代码如下: using System; using System.Threading; class Program { static void Main(string[] args) { Thread thread = new Thread(new ThreadStart(TestMethod)); thread.Start(); } static void TestMethod() { Console.WriteLine("This is a test method."); } } 五、多线程的优点: 1、可以同时完成多个任务; 2、可以使程序的响应速度更快; 3、可以让占用大量处理时间的任务或当前没有进行处理的任务定期将处理时间让给别的任务; 4、可以随时停止任务; 5、可以设置每个任务的优先级以优化程序性能。 不利方面: (1)线程也是程序,所以线程需要占用内存,线程越多,占用内存也越多。 (2)多线程需要协调和管理,所以需要占用CPU时间以便跟踪线程。 (3)线程之间对共享资源的访问会相互影响,必须解决争用共享资源的问题。 (4)线程太多会导致控制太复杂,最终可能造成很多程序缺陷。 线程的优先级 线程是根据优先级调度执行的; 具有最高优先级的线程总是最先执行; 只要具有较高优先级的线程可以运行,较低优先级的线程就不会执行; 如果多个具有相同优先级的线程可用,程序将遍历处于该优先级的线程,并为每个线程提供一个固定的时间片来执行; 如果具有较高优先级的线程可以运行时,较低优先级的线程就会被抢先,并允许较高优先级的线程再次执行。 六、线程安全 在C#中解决线程安全问题,可以采取以下几种策略:lock 关键字:使用lock关键字可以确保在给定时刻只有一个线程可以执行某段代码。这类似于Java中的synchronized代码块。 private readonly object lockObject = new object(); public void MyThreadSafeMethod() { lock (lockObject) { // 线程安全的代码区域 } }

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

135 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传