多线程GCD的理解

串行队列或者并发队列都会遵循FIFO(先进先出)的原则

- (void)test { NSLog(@"Start"); dispatch_sync(dispatch_get_main_queue(), ^{}); }

上述代码是典型的死锁案例执行顺序是先执行Start,然后将block和主队列传给GCD的 dispatch_sync函数等待执行,直到它返回.由于主队列属于串行队列,先进先出,不能并发执行,当前只能执行一个任务, test函数作为一个 待执行的任务添加在主队列,dispatch_sync函数携带的block任务被添加到test后面,需要等待 test执行结束后才能执行,而dispatch_sync函数特性是等待block执行完毕后返回(同步阻塞当 前线程),而dispatch_sync不返回,test函数也无往下进行,就出现了相互等待的现象,即死锁。

【多线程GCD的理解】不定期更新中…

    推荐阅读