关于GCD的那些事
一,死锁
任务1 先加入主队列 并且已经开始执行 然后打印出1
NSLog(@"任务1========%@",[NSThread currentThread]);
这时任务2被下面这个函数也加入到主队列 并且同步执行
系统就会觉得同步执行,不开新线程了
任务2就要等block函数执行完成,不然不返回 主队列是串行的,要等任务1完成才能轮到任务2
这是规矩 任务2是任务1的内部函数 必须等到任务1执行完才执行下一个任务,就造成任务1等任务2完成,任务2等任务1完成 从未造成 死锁
dispatch_sync(dispatch_get_main_queue(), ^{//直接蹦在这
NSLog(@"任务2========%@",[NSThread currentThread]);
});
NSLog(@"3========%@",[NSThread currentThread]);
下面代码正常执行了,并且是顺序执行的,任务1在主队列中,但是任务2加入到了全局队列,这时候,任务1和任务2没有队列的约束,所以任务1就先执行喽,执行完毕之后函数返回,任务2接着执行。
NSLog(@"任务1========%@",[NSThread currentThread]);
dispatch_sync(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSLog(@"任务 2========%@",[NSThread currentThread]);
});
NSLog(@"任务3========%@",[NSThread currentThread]);