主队列中添加的同步操作(dispatch_sync)永远不会被执行,会死锁原因

如题涉及到的三个对象: 主队列同步添加任务: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)永远不会被执行,会死锁原因)