多线程技术方案主要分为以下几类:
其中的GCD又分为以下几类:
GCD调用的四种组合
(异步分派一个任务到并发队列上面)
主要考察 同步异步的区别和串行/并发的理解
(1)同步串行理解
上面代码会产生死锁
原因是:队列引起的循环等待,如下图
主队列里提交了一个 viewDidLoad 和一个BLock ,这两个任务最终都要分配到主线程去处理 例如先执行 viewDidLoad 执行过程中他会调用 BLock 它要依据主队列的一个性质( 先进先出 ) 所以只有等到viewDidLoad 处理完成才能 处理BLock 提交 因此 造成了 相互等待的一种情况 造成死锁
原理如下图:
异步栅栏调用
通过一个异步调用的方式 来实现一个多读单写的方案
如下实现
总结:
如何用GCD 实现多读单写
利用 GCD 实现一些简单的线性同步,包括一些子线程的反派,包括一些多读单写场景的解决