iOS DeveloperiOS OC 学习手册

对于GCD中"死锁"的个人思索

2016-12-29  本文已影响32人  果啤

在查看GCD的官方API文档时,其中的一句话深深的深深地打动了我:

屏幕快照 2016-12-29 下午4.05.45.png

原文链接:
https://developer.apple.com/reference/dispatch

翻译过来大致意思就是:
尝试在主队列上同步执行任务会导致死-锁.

官方文档就这样给你一个结论,没有多余的解释(不跟你多BB).

通常在非主线程中执行完耗时的任务后,需要向主队列中提交任务来实现与主线程的通信,在主线程中进行UI的更新.但是我使用dispatch_sync()函数尝试向主队列提交同步执行的任务并没有导致死锁.

经过一番思索和测试,对于"使用dispatch_sync()函数尝试向主队列提交同步执行的任务是否会导致"死锁"这个问题,我终于能够给自己一个说的过去的解释了.

结合代码阐述一下我的理解:

好久没玩简书了,MARKDOWN都忘了,翻下笔记

<pre>
<code>
`
// ViewController.m
// dead-lock 死锁

import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

 */

}

@end

`
</code>
</pre>

调用- (IBAction)willNotResultInDeadLock方法,输出如下:
2016-12-29 17:38:21.949 dead-lock 死锁[23295:163231] 15,currentThread-><NSThread: 0x600000079b00>{number = 3, name = (null)} 2016-12-29 17:38:21.951 dead-lock 死锁[23295:163146] 18,currentThread-><NSThread: 0x600000068280>{number = 1, name = main}

调用- (IBAction)willResultInDeadLock方法导致了死锁,程序崩溃:

屏幕快照 2016-12-29 下午5.41.39.png

"知其然而不知其所以然"的感觉常常让我在编程时候很不安,总要担心程序会不会有潜在的问题,遇到很抽象的难理解的问题时,能解决的话我通常会花几个小时,花几天来解决.实在是解决不了,就放到备忘录中,留着以后有空的时候解决.你们是否也有这种不安的感觉?

上一篇 下一篇

猜你喜欢

热点阅读