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.其他
 爱站程序员基地
爱站程序员基地
![(原创)[C#] 一步一步自定义拖拽(Drag&Drop)时的鼠标效果:(一)基本原理及基本实现-爱站程序员基地](https://aiznh.com/wp-content/uploads/2022/07/20220721231016-62d9dcd85c40b-220x150.gif)

