串行队列或者并发队列都会遵循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函数也无往下进行,就出现了相互等待的现象,即死锁。
不定期更新中…
网友评论