主队列中添加的同步操作(dispatch_sync)永远不会被执行,会死锁原因
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了主队列中添加的同步操作(dispatch_sync)永远不会被执行,会死锁原因相关的知识,希望对你有一定的参考价值。
参考技术A 如题涉及到的三个对象: 主队列 , 同步添加任务:dispatch_sync(main_queue,block) , 所添加的任务:block;一.主队列特点: 后面的任务必须等待前面的任务执行完成才可以进行执行,不能插队;
二.同步添加任务:dispatch_sync( main_queue,block )函数的特点: 必须等待其所提交的任务block执行完成,此函数才能返回,函数返回后,此函数才算执行完成;
三.所添加的任务:block: 由于此任务由于被dispatch_sync()添加到了主队列,再根据主队列的特点,所以此任务必须等待dispatch_sync()函数执行完成之后才能进行执行;再结合第二点,dispatch_sync()函数必须等待block任务执行完成才能返回.所以造成死锁;
举例:
现在有三个人:老板, 你, 亚飞;
用上三个人 模拟同步提交任务到主队列:dispatch_sync(main_queue,block)
用上三个人 模拟异步提交任务到主队列:dispatch_async(main_queue,block)
以上是关于主队列中添加的同步操作(dispatch_sync)永远不会被执行,会死锁原因的主要内容,如果未能解决你的问题,请参考以下文章
从主队列调用 dispatch_sync 并且执行的块保存到核心数据时 iOS 死锁