C#多线程进阶二(并行编程Parallel ,任务调度器 ,async/await ,线程安全(各种锁机制))

一. 并行编程Parallel

  本质是对task的进一步封装,一些复杂的循环计算,可以考虑使用Parallel实现并行执行。(可以指定cpu的参与个数)
在这里插入图片描述

二. 任务调度器

  场景:winform 子线程更新UI,(跨线程访问UI)
  以前一般用法delegate和invoke来实现跨线程更新UI,现在可以使用Task调度器

在这里插入图片描述

三. async/await

  async和await一般成对出现,本质还是task,只不过语法更加简洁。
  主线程调用async/await方法时,主线程碰到await会返回执行后续主线程的代码,await后面的代码会等着task任务完成后再继续执行(由子线程)
在这里插入图片描述

四. 线程安全

  线程安全: 如果你的代码在进程中有多个线程同时运行这一段,如果每次运行的结果都跟单线程运行时的结果一致 ,那么就是线程安全的。
  线程安全问题: 一般有全局变量/共享变量/静态变量/硬盘文件/数据库的值,只要多线程都能访问和修改,就会存在线程安全问题。

在这里插入图片描述

  解决办法:
  1.避免去操作同一个变量
  2.如果无法避免,可以使用锁机制,以下是使用锁机制的使用
在这里插入图片描述
  注意: 使用锁的时候要避免死锁到情况出现。

  多线程中,有各种各样到锁,在这里没有时间一一列举。等使用到时候,再去查吧。

  1.用户模式锁
  volatile关键字的使用
  SpinLock(旋转锁)

  2.内核模式锁:事件锁、信号量、互斥锁、读写锁
  通常不建议随便使用内核模式锁,资源付出相对较大。

  3.动态计数锁
  限制线程的一个机制,比较常用。

  4.监视锁
  限制线程个数的锁

   5.其他

猜你喜欢

转载自blog.csdn.net/qq_33101689/article/details/106357328