GCD死锁同步和异步

146 阅读1分钟

死锁的原因:

  • 串行队列的当前线程添加同步任务会发生 死锁

image.png

  • 主队列也是串行队列
  • 向串行队列添加同步任务发生 死锁 image.png

同步执行和异步执行的区别

  • 1、同步执行函数,立即执行,不开启线程在当前线程执行 阻塞当前线程
  • 2、异步函数,保存当前的需要执行的任务,有线程相关的操作,不阻塞当前线程

并发队列:

并发队列:同步嵌入异步,,同步的有顺序 异步的无法确定

image.png

打印结果:24 5 3 2和4顺序是定的 并发队列:异步嵌套同步,同步立即执行

image.png

打印结果: 234 5是不确定的

并发队列:同步嵌同步

image.png

打印:2345 并发队列:异步嵌异步

image.png

打印:5 24 3 其中5的位置不定 3也不定 只 24定 (24 和3在不同的线程)

串行队列:

  1. 串行:异步 + 同步 死锁,

  2. 串行:异步 + 异步 按添加队列的顺序执行

  3. 串行:同步 + 同步 死锁

  4. 串行:同步 + 异步 先同步 走完再异步,按照加入队列的顺序

全局并发队列:

image.png

打印结果:>= 100 原因:while循环会卡住代码直到 >100

image.png

打印结果:< 100 原因:for 循环会卡不住代码 有可能打出 0